main函数

Goroutines和Channels

不想你离开。 提交于 2020-02-13 18:53:30
原文链接 https://golangbot.com/goroutines/ Goroutines Goroutines 可以被认为是多个函数或方法同时允许。可以认为是一个轻量级的线程。与线程的花费相比是非常小的。 与线程相比的优势 Goroutines 非常的轻量级,只需要几kb的内存分配 并且是可以根据需要动态可伸缩的。而线程的内存分配大小是固定的 Goroutines 可以多路复用到几个OS线程中。可能只有一个线程对应到很多歌Goroutines.如果有任何一个Goroutine等待了 比如说需要用户输入 那么另外一个OS线程就会被创建 然后剩下的Goroutines 就会被移动到新的OS线程中被执行 Goroutines使用channels沟通。channels被设计在多个Goroutines共享内存时 防止竞态的发生。channels可以被认为是Goroutines的沟通管道 开始运行一个Goroutine 例子 package main import ( "fmt" ) func hello() { fmt.Println("Hello world goroutine") } func main() { go hello() //time.Sleep(1 * time.Second) //fmt.Println("main function") fmt.Println(

复习打卡--0823 队列和多进程

北城以北 提交于 2020-02-13 02:33:44
一、队列 Python的Queue模块中提供了同步的、线程安全的队列类,包括 FIFO (先入先出)队列 Queue , LIFO (后入先出)队列 LifoQueue ,和优先级队列 PriorityQueue 。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。 queue.Queue(maxsize=0) maxsize默认为0,不设置或设置为负数时,表示可接受的消息数量没有上限。 常用方法: Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。 Queue.join() 实际上意味着等到队列为空,再执行别的操作 Queue.put(item,block=True, timeout=None) 写入队列,block=True,Timeout=3 意味着等待3s,队列仍没有位置就报错;block=False 意思是不等待,队列如果满了直接报错; Queue.get(block=True, timeout=None) 获取队列,block和timeout参数说明同上put Queue.get_nowait() 相当于Queue.get(block=False),不等待 Queue

C++学习之路——string字符串类具体用法

泄露秘密 提交于 2020-02-13 02:13:26
引言: C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。 string 是 C++ 中常用的一个类,它非常重要,我们有必要在此单独讲解一下。 定义 使用 string 类需要包含头文件,下面的例子介绍了几种定义 string 变量(对象)的方法: # include <iostream> # include <string> using namespace std ; int main ( ) { string s1 ; string s2 = "c plus plus" ; string s3 = s2 ; string s4 ( 5 , 's' ) ; return 0 ; } 变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是"",也即空字符串。 变量 s2 在定义的同时被初始化为"c plus plus"。与C风格的字符串不同,string 的结尾没有结束标志’\0’。 变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是"c plus plus"。 变量 s4 被初始化为由 5 个’s’字符组成的字符串,也就是"sssss"。 从上面的代码可以看出,string 变量可以直接通过赋值操作符=进行赋值

理解 Java 方法引用(方法引用符:“双冒号 :: ”)

六眼飞鱼酱① 提交于 2020-02-13 01:47:23
方法引用 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿什么参数做什么操作。那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑? 冗余的Lambda场景 来看一个简单的函数式接口以应用Lambda表达式: @FunctionalInterface public interface Printable { /** * 接收一个字符串参数,打印显示它 * @param str 字符串 */ public abstract void print(String str); } 在 Printable 接口当中唯一的抽象方法 print 接收一个字符串参数,目的就是为了打印显示它。那么通过Lambda 来使用它的代码很简单: public class Demo01PrintSimple { public static void main(String[] args) { printString(s -> System.out.println(s)); } private static void printString(Printable data) { data.print("Hello, World!"); } } 其中 printString 方法只管调用 Printable 接口的 print

Python多线程自学笔记

倖福魔咒の 提交于 2020-02-12 23:15:21
threading 模块 Thread 类的用法详解 这篇笔记主要是简化了 https://blog.csdn.net/briblue/article/details/85101144 如何理解线程 引用知乎上一个高赞的回答 创建Thread对象有2种方法 直接创建Thread,并通过函数回调处理任务 编写自定义类继承Thread 总结知识 如何给线程赋值名字 如何知道线程是否继续运行 如何提供线程阻塞手段 如何主线程结束的同时子线程也立马结束 1.1创建Thread,并通过函数回调处理任务的方法 这个方法最重要的参数是target,直接上代码 import threading import time def test ( ) : for i in range ( 5 ) : print ( 'test ' , i ) time . sleep ( 1 ) thread = threading . Thread ( target = test ) thread . start ( ) for i in range ( 5 ) : print ( 'main ' , i ) time . sleep ( 1 ) 代码运行结果 test 0 main 0 main 1 main 2 main 3 main 4 test 1 test 2 test 3 test 4 1

Java 多线程 - Synchronized关键字

∥☆過路亽.° 提交于 2020-02-12 05:42:51
目录 1-Synchronized 关键字概述 2- Synchronized关键字作用域 3- Synchronized 原理(反编译指令解释) 正文 1-Synchronized 关键字概述 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 需要明确的几个问题: synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果 再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。 每个对象只有一个锁(lock)与之相关联。 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 2- Synchronized关键字作用域 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步方法块

C语言试题

拈花ヽ惹草 提交于 2020-02-12 00:26:13
1 .设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为(  )。 2 .设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是( )。 3 .下面程序段的输出结果是( )。 int a=1234; a=a&0377; printf( “%d %o"n”,a,a); 4 .a数组定义如下,按照内存排列顺序,a数组中的所有元素是( )。 char a[3]; 8 .C语言中调用( )函数打开文件,调用( )函数关闭文件,调用( )函数可实现文件的随机读写。 9 .若有int a[3]={10,12,30};则a+1是( )的地址,*(a+2)=( )。 二 判断对错(5分,对的划“√”,错的划“×”) 1 .在Turbo C中,整型数据在内存中占2个字节。( ) 2 .表达式1/4+2.75的值是3。( ) 3 .结构体类型只有一种。( ) 4 .函数若无返回值,则它一定无形参。( ) 5 .C语言只能处理文本文件和二进制文件。( ) 三 选择题(20分) 1 .设 int a=12; 表达式a+=a-=a*=a的值是(  )。 A 12 B 144 C 0 D 132 2 .以下程序的输出结果是(  )。 main( ) { int a=011; printf( “%d"n”,++a); } A 12 B 11 C 10 D 9 4.

JavaSE学习笔记(8)---常用类

北城以北 提交于 2020-02-11 22:38:01
JavaSE学习笔记(8)---常用类 1、Object类 java.lang.Object 类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。 如果一个类没有特别指定父类,那么默认则继承自Object类。例如: public class MyClass /*extends Object*/ { // ... } 根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。最常用的是其中的2个: public String toString() :返回该对象的字符串表示。 public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。 toString方法 public String toString() :返回该对象的字符串表示。 toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 覆盖重写 如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类: public class Person { private String name

day24_Stream流、方法引用

南楼画角 提交于 2020-02-11 22:28:07
Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢? 在Java 8中 ,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念, 用于解决已有集合类库既有的弊端。 由来 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: package demo01; import java.util.ArrayList; import java.util.List; public class Demo01ForEach { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); for (String name : list) { System.out.println(name); } } } 这是一段非常简单的集合遍历操作:对集合中的每一个字符串都进行打印输出操作。 循环遍历的弊端 Java

常用的函数式接口

筅森魡賤 提交于 2020-02-11 22:11:36
常用的函数式接口 1.Comparator 如果一个方法的返回值是一个函数式接口,那么就可以直接返回一个lambda表达式。 当需要通过一个方法来获取一个java.util.Compartor接口类型的对象作为排序器时,就可以调该方法获取 public class Demo03Comparator { public static Comparator<String > getCompartor() { /*return new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.length()-o2.length(); } };*/ //使用函数式接口 /* return (String o1, String o2)-> { return o1.length()-o2.length(); };*/ //简化lambda表达式,去掉修饰符,{}和return ; return (o1,o2)->o1.length()-o2.length() ; } public static void main(String[] args) { String arr[]={"a","bb","dddd","ccc"}; //System.out.println(arr