6-2 操作系统线程和进程常考面试题
Posted WinvenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6-2 操作系统线程和进程常考面试题相关的知识,希望对你有一定的参考价值。
一、进程和线程的区别
进程和线程对比
1.进程是对运行时程序的封装,是系统资源调度和分配的基本单位
2.线程是进程的子任务,cpu
调度和分配的基本单位,实现进程内并发
3.一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存
二、什么是线程安全
python
哪些操作是线程安全的?
1.一个操作可以在多个线程环境中安全使用,获取正确的结果
2.线程安全的操作好比线程是顺序执行而不是并发执行的(i += 1
)
3.一般如果涉及到写操作需要考虑如何让多个线程安全访问数据
三、线程同步的方式
了解线程同步的方式,如何保证线程安全
1.互斥量(锁):通过互斥机制防止多个线程同时访问公共资源(可以查看threading.Lock
),这是最常用的方式。
2.信号量(Semaphore
):控制同一时刻多个线程访问同一个资源的线程数(可以查看threading.Semaphore
)
3.事件(信号):通过通知的方式保持多个线程同步(可以查看threading.Event
)
重点:
1.什么是线程安全?
2.为什么要保证线程安全?
3.什么时候需要保证线程安全?
4.线程安全同步的方式
四、进程间通信的方式
Inter-Process Communication
进程间传递信号或者数据
1.管道/匿名管道/有名管道(pipe
)
2.信号(Signal
):比如用户使用 Ctrl+c
产生SIGINT
程序终止信号
3.消息队列(Message
)
4.共享内存(share memory
)
5.信号量(Semaphore
)
6.套接字(socket
):最常用的方式,我们的web
应用都是这种方式
五、Python
中如何使用多线程
threading
模块
1.threading.Thread
类用来创建线程
2.start()
方法启动线程
3.可以用join()
等待线程结束
说明:通过阅读官方文档来学习内置模块用法。
之前的代码示例:
import threading
lock = threading.Lock()
n = [0]
def foo():
with lock:
n[0] = n[0] + 1
n[0] = n[0] + 1
threads = []
for i in range(5000):
t = threading.Thread(target=foo)
threads.append(t)
for t in threads:
t.start()
print(n)
六、Python
中如何使用多进程
Python
有GIL
,可以用多进程实现 cpu
密集程序
1.Multiprocessing
多进程模块
2.Multiprocessing.Process
类实现多进程
3.一般用在 cpu
密集程序里,避免 GIL
的影响
代码示例:
# 多进程
import multiprocessing
def fib(n):
"""worker function"""
if n <= 1:
return 1
return fib(n-1) + fib(n-2)
if __name__ == '__main__':
jobs = []
for i in range(10, 20):
p = multiprocessing.Process(target=fib, args=(i, ))
jobs.append(p)
p.start()
以上是关于6-2 操作系统线程和进程常考面试题的主要内容,如果未能解决你的问题,请参考以下文章