参考回答:
1、概念:
协程,又称微线程,纤程,英文名Coroutine。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
例如:
def A() :
print '1'
print '2'
print '3'
def B() :
print 'x'
print 'y'
print 'z'
由协程运行结果可能是12x3yz。在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A。但协程的特点在于是一个线程执行。
2)协程和线程区别
那和多线程比,协程最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
3)其他
在协程上利用多核CPU呢——多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
Python对协程的支持还非常有限,用在generator中的yield可以一定程度上实现协程。虽然支持不完全,但已经可以发挥相当大的威力了。
本文向大家介绍请你来说一说http协议相关面试题,主要包含被问及请你来说一说http协议时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)HTTP协议: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来
本文向大家介绍请你说一说epoll原理?相关面试题,主要包含被问及请你说一说epoll原理?时的应答技巧和注意事项,需要的朋友参考一下 调用顺序: int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struc
本文向大家介绍请你来说一下fork函数?相关面试题,主要包含被问及请你来说一下fork函数?时的应答技巧和注意事项,需要的朋友参考一下 Fork:创建一个和当前进程映像一样的进程可以通过fork( )系统调用: #include <sys/types.h> #include <unistd.h> pid_t fork(void); 成功调用fork( )会创建一个新的进程,它几乎与调用fork(
本文向大家介绍请你说一说C++两种map?相关面试题,主要包含被问及请你说一说C++两种map?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: unordered_map(哈希表)和map(红黑树)
本文向大家介绍请你说一说Top(K)问题?相关面试题,主要包含被问及请你说一说Top(K)问题?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、直接全部排序(只适用于内存够的情况) 当数据量较小的情况下,内存中可以容纳所有数据。则最简单也是最容易想到的方法是将数据全部排序,然后取排序后的数据中的前K个。 这种方法对数据量比较敏感,当数据量较大的情况下,内存不能完全容纳全部数据,这种方法
本文向大家介绍请你说一说HTTP返回码相关面试题,主要包含被问及请你说一说HTTP返回码时的应答技巧和注意事项,需要的朋友参考一下 参考回答: HTTP协议的响应报文由状态行、响应头部和响应包体组成,其响应状态码总体描述如下: 1xx:指示信息--表示请求已接收,继续处理。 2xx:成功--表示请求已被成功接收、理解、接受。 3xx:重定向--要完成请求必须进行更进一步的操作。 4xx:客户端错误