线程与进程理论
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程与进程理论相关的知识,希望对你有一定的参考价值。
前言
多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外)。然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题。
然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降了,这是多么蛋疼的一件事呀!如果想了解更多细节,推荐阅读这篇文章
Python提供两组线程的接口,一组是thread模块,提供基础的,低等级接口,使用Function作为线程的运行体。还有一组是threading模块,提供更容易使用的基于对象的接口,可以继承Thread对象来实现线程,还提供了其它一些线程相关的对象
使用thread模块的例子:
import thread
def worker():
"""thread work function"""
print ‘Work‘
thread.start_new_thread(work)
再讲一下进程
由于前文提到的全局解释锁的问题,Python下比较好的并行方式是使用多进程,这样可以非常有效的使用CPU资源,并实现真正意义上的并发。进程的开销比线程要大服务器承受能力就越大
由于线程共享相同的地址空间和内存,所以线程之间的通信是非常容易的,然而进程之间的通信就要复杂一些了。常见的进程间通信有,管道,消息队列,Socket接口
Python的mutliprocess模块提供了封装好的管道和队列,可以方便的在进程间传递消息,还提供了进程池Pool对象,可以方便的管理和控制线程
以上是关于线程与进程理论的主要内容,如果未能解决你的问题,请参考以下文章