GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe…
通常,recv函数没有数据可用时会阻塞等待.同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞.在套接字非阻塞模式下,行为会改变.在这种情况下,这些函数不会阻塞而是失败,设置errno为EWOULDBLOCK或者EAGAIN.当这些发生时,可以使用poll或select来判断何时能接收或者传输数据. 在Single UNIX Specification中,其实时扩展包含对通用异步I/O机制的支持.套接字机制有自己的方式来处理异步I/O,但是在Single UNIX Specifi…
https://mp.weixin.qq.com/s/5SKgdkC0kaHN495psLd3Tg 说在前面 上篇NIO相关基础篇二,主要介绍了文件锁.以及比较关键的Selector,本篇继续NIO相关话题内容,主要谈谈一些Linux 网络 I/O模型.零拷贝等一些内容,目前能理解到的就这些了,后续还会继续有一到二篇左右与NIO内容相关,估计在后续netty等一些学习完成之后,在回过头来看看NIO系列,再补充补充. 用户空间以及内核空间概念 我们知道现在操作系统都是采用虚拟存储器,那么对32位操…
最近在研究java IO.NIO.NIO2(或者称AIO)相关的东西,有些概念还是要明确下. 按照<Unix网络编程>的划分,IO模型可以分为:阻塞IO.非阻塞IO.IO复用.信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO. 如何区分呢?首先一个IO操作其实分成了两个步骤: 1.发起IO请求 2.实际的IO操作 阻塞和非阻塞IO:在于第一个步骤是否会会被阻塞,如果会则是阻塞IO,否则是非阻塞IO. 异步和非异步(同步)IO:在于第二个步骤是否会阻塞,如果实际的I…
•阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待: •同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞:异步只需要I/O操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写. 下面两个答案是从知乎上转过来的. 作者:严肃链接:http://www.zhihu.com/question/19732473/answer/20851256来源:知乎著作权归作者所有,转载请联系作者获得授权. “阻塞”与"非阻塞"与"同步&…
原文地址: IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用.在不同的操作系统中,IO读写的系统调用的名称可能不完全一样,但是基本功能是一样的. 这里涉及一个基础的知识:read系统调用,并不是直接从物理设备把数据读取到内存中:write系统调用,也不是直接把数据写入到物理设备.上层应用无论是调用操作系统的read,还是调用操作系统的write,都会涉及缓冲区. 具体来说,调用操作系统的read,是把数据从内核缓冲区复…
POSIX 把这同步.异步两个术语定义 如下: 同步 I/O 操作( synchronous I/O opetation) 导致请求进程阻塞, 直到 I/O 操作完成: 异步 I/O 操作( asynchronous I/O opetation) 不导致请求进程阻塞. 根据上述定义, 我们的前4种模型都是同步 I/O 模型: 阻塞式 I/O 模型(等待执行完毕). 非阻塞式 I/O 模型(没有数据时立即返回,轮询). I/O 复用模型(阻塞在系统调用上,等待多个描述符) 和 信号驱动式 I/O…
1.什么是进程 进程指的是一个正在运行的程序,进程是用来描述程序执行过程的虚拟概念 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的 2.操作系统 操作系统是一个协调/管理/控制计算机硬件资源与应用软件资源的一段控制程序 有两大功能: 1.将复杂的硬件操作封装成简单的接口给应用程序或用户去使用 2.将多个进程对硬件的竞争变得有序 并发:多个任务看起来是同时运行的 串行:一个任务完完整整地运行完毕,才能运行下一个任务 多道技术:多道技术的实现是为了解决多…
阻塞IO 一般表现为 进程/线程 调用IO操作后就一直死循环等待,直至IO操作结束,返回IO结果 非阻塞IO 一般表现为 进程/线程 调用IO操作后,可以先去干别的事情,但是每隔一段时间,回去询问一下结果,如果IO操作结束,则返回结果 异步IO 一般表现为 进程/线程 调用IO操作后,直接去干别的事情,直接不返回结果(有时不返回结果,但是会返回一个任务id,供后续查询使用).结果通过回调函数反馈给用户,或者用户通过之前得到的id自己去查询结果.(celery就是这样)…
参考博客: ①setsockopt()函数使用详解:http://blog.csdn.net/tody_guo/article/details/5972588 ②setsockopt :SO_LINGER 选项设置:http://blog.csdn.net/factor2000/article/details/3929816 ③TIME_WAIT状态的作用:http://www.cnblogs.com/li-hao/archive/2011/12/08/2280678.html 在学习linux…