多线程
多线程:
一个应用程序中有多个执行部分可同时执行,同一时间完成多项任务,以提高资源使用效率。如:QQ软件可同时实现播放音效、消息发送等功能Python标准库提供的2个模块:
_thread(低级模块)、threading(高级模块,已对_thread进行封装)启动一个线程:
创建线程+执行线程。把一个函数传入并创建Thread实例,然后调用start()开始执行注意:
多线程执行时的"同时"非同一时刻,而是同一时间段内
线程锁
线程锁:
解决某个线程执行到一半又去执行另一个线程,导致的多线程执行产生错乱。具体表现为:多线程执行过程中,将每个子线程执行的代码作为一个完整的单元进行锁定,执行某个单元未完成时不跳出执行,执行完成一个完整的单元即进行解锁释放。
线程生命周期(按状态描述)
多线程程序的生命周期
多线程程序只要有一个线程死掉,整个进程也死掉了
,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。原因:
线程同步:
当软件中要用到多线程,当1号线程运行变量要等待另2号线程的结果时,1号和2号线程就要同步,也就是一个线程要等待另一个线程,或是相互等待。线程安全:
比两个或两个以上软件要同时操作(主要指写操作)一个全局变量时,这个时间点不能相同,这样两个线程的操作会造成程序崩溃,也就是这个状态称为线程不安全(一般用全局信号量来调整两个线程的写入时间点,防止冲突)线程死锁:
当线程为了安全及同步时,用全局信号量进行相互等待或是相互制约时程序进入了一个死锁状态时(两个线程都停掉了)叫线程死锁。
多进程
- 多进程可实现
同一时间点多个任务并行
。举例:电脑能够同时开启多个软件
进程锁
- 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行的修改,虽然保证了数据安全,但是降低了效率。