day 33 线程学习之线程进程效率对比. 锁. 信号量 . 事件

一  . 线程

   线程是cpu最小的执行单位,是能独立运行的基本单位,进程是资源分配的最小单位。且:每个进程中最小有一个线程

  线程与进程的区别:

  1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

  2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。(就类似进程中的锁的作用)
  3)调度和切换:线程上下文切换比进程上下文切换要快得多。
  4)在多线程操作系统中(现在咱们用的系统基本都是多线程的操作系统),进程不是一个可执行的实体,真正去执行程序的不是进程,是线程,你可以理解进程就是一个线程的容器。

  线程的特点:(1)轻型实体(2)独立调度和分派的基本单位 (3)共享进程资源(4)可并发执行

  线程跟进程一样,都是互相充满 ‘敌意’ 的,彼此抢占资源,彼此占cpu。

二 . 线程的两种创建方式

(1)   from  threading import Thread

  def func( )

  pass

  t = Thread(target = func,args = ())

  t.start()

(2)   class MyThread(Thread):

    def __init__(self,n):

      super().__init()

      self.n = n

    def  run(self):

       pass

  t = MyThead(12)

三 . 线程与进程效率的对比 ,join方法

  线程比进程的效率要快很多,进程的运行还需要电脑的配置,cpu的运行速度,线程的话是不需要的,所以,开启一个线程的时间是远小于进程的。

四 . 同线程之间是数据共享的

  同一进程与线程之间是数据共享的,多个线程之间有数据栈,数据不共享的,全局变量在多个线程之间数据是

共享的,进程也一样。

五 . 锁(互斥锁\同步锁)

  Look,解决数据共享时数据不安全的问题,但是同时牺牲了效率。

  开始锁:lock.acquire()

  关闭锁:lock.release()  只能有一个锁

六 . 死锁现象

  双方互相等待对方释放对方手里拿到的那个锁

    一样的,也是只能有一个锁,你在用,别人就不能用,就跟上厕所是一样的,别人在上这个厕所,你只能等。

七 . 递归锁 :Rlock

  A = B = Rlock   创建同等条件

  同样是互斥的,里面存着个计数器,只有等锁计数为0的时候,才能将锁传递给下一位追梦者。

八 . 守护进程

  线程的守护进程跟进程的守护进程不太一样,

  守护线程:主线程等着进程中所有非守护线程的结束,才算结束。

  守护进程:主进程代码结束,守护进程也跟着结束。

九 . 信号量:大宝剑原理

  四个位置十个人,一次只能进去四个人,也就是每个代码的时间不同,进出的时间也不同,是不规律的,又快也有慢。

十 . 事件

   e = Event

  线程的事件跟进程的事件是一样的

  

event.isSet():返回event的状态值;
event.wait():如果 event.isSet()==False将阻塞线程;
event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
event.clear():恢复event的状态值为False。

  

猜你喜欢

转载自www.cnblogs.com/liuteacher/p/10044787.html