Python网络编程(线程通信、GIL、服务器模型)

Python网络编程(线程通信、GIL、服务器模型)

ID:21365833

大小:21.81 KB

页数:12页

时间:2018-10-21

Python网络编程(线程通信、GIL、服务器模型)_第1页
Python网络编程(线程通信、GIL、服务器模型)_第2页
Python网络编程(线程通信、GIL、服务器模型)_第3页
Python网络编程(线程通信、GIL、服务器模型)_第4页
Python网络编程(线程通信、GIL、服务器模型)_第5页
资源描述:

《Python网络编程(线程通信、GIL、服务器模型)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、什么是进程、进程的概念?进程的概念主要有两点:·第一,进程是一个实体。每一个进程都有它自己的地址空间,·一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。·文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。·第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),·它才能成为一个活动的实体,我们称其为进程。·[size=13.125px][3]

2、进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,·描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。什么是线程、进程的概念?·    通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,·    在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,·    而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,·    故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的

3、程度。·    当下推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。线程通信  线程通信方法:      多个线程共用线程空间,所以进程的全局变量对进程内线程均可见      线程的通信方法就是使用去全局变量通信  注:      线程间使用全局变量进程通信时,全局变量为共享资源      往往需要同步互斥机制线程同步互斥:  线程Event      创建对象:        e=threading.Event()      事件阻塞函数:        e.wait([time

4、out])      设置事件:        e.set()      清除事件:        e.clear()  线程锁Lock:      创建锁对象        lock=threading.Lock()      上锁:        lock.acquire()      解锁:        lock.release()Pyhthon线程GIL问题:  GIL(全局解释器锁)  Python--->支持线程操作--->出现IO同步互斥--->加锁--->超级锁,给解释器加锁  由于Python为后端语言所有的后

5、端语言都支持线程操作、IO同步互斥、由于线程间的数据安全及稳定性所以要加锁,如果每个线程都加锁开发以及运行的效率是非常低的  所以就出现了超级锁  就是给Python解释执行器加锁由于加锁的原因而导致了GIL的出现  什么是GIL?·  GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念· 由于不同的执行环境(解释器)所导致的例如Jpython  C#py都没有GIL·  Python的多线程在多核CPU上,只对于IO密集型计算产生正面效果;· 而当有至少有一个CPU密集型线程存在,那

6、么多线程效率会由于GIL而大幅下降。· GIL其实是功能和性能之间权衡后的产物,它尤其存在的合理性,也有较难改变的客观因素  后果:      同一时刻一个解释器只解释一个线程      此时其他线程需要等待。大大降低了Python线程的执行效率      只能实现并发不能实现并行PythonGIL问题解决方案:    由于太多的库依赖于GIL的这种环境并没有太好的解决方案    帮助:    1.修改c解释器    2.尽量使用多进程进行并行操作    3.Python线程尽量用在高延迟多阻塞的IO情形    3.不使用CPyt

7、hon  使用C#、JAVA做的得解释器效率测试:  分别测试多进程、多线程、单进程  执行相同的IO操作和CPU操作的时间·Linecpu:8.15166711807251  单进程cpu密集操作·LineIO:6.841825246810913  单进程IO密集操作··Threadcpu8.414522647857666  多线程cpu密集操作·ThreadIO6.023292541503906    多线程IO密集操作··Processcpu4.079084157943726  多进程cpu密集操作·ProcessIO3.2

8、132551670074463  多进程IO密集操作测试环境:VM2核虚拟机由此我们可以看出  多次线程不仅执行实现没有单进程快反而更慢了这就是GIL所导致的相比来说多进程就快很多内核越多效率越明显  由于全局锁的原因多线程并没有实现,并行只是并发

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。