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中如何使用多进程

PythonGIL,可以用多进程实现 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 操作系统线程和进程常考面试题的主要内容,如果未能解决你的问题,请参考以下文章

面试题:Linux常考命令

面试题java常考面试题

面试常考:C#用两个线程交替打印1-100的五种方法

腾讯面试题04.进程和线程的区别?

进程和线程面试题

操作系统面试题集合