一、python中的并发/并行、同步/异步、阻塞、非阻塞
并发和并行
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上。
并行:但系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行
同步和异步
同步:执行A任务,A任务完成后,才能执行B任务
异步:先执行A任务,A任务启动后,直接执行B任务
阻塞和非阻塞
阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务
非阻塞:非阻塞和阻塞的概念相对应,指在不能得到结果之前,该函数不会阻塞当前线程,而会立刻返回
二、python中高并发怎么处理
- 多线程:Python中的多线程可以通过 threading 模块来实现。多线程可以提高程序的并发性能,但是需要注意线程安全问题
- 多进程:Python中的多进程可以通过 multiprocessing 模块来实现。多进程可以在多核CPU上实现并发执行,但是进程间的通信和同步需要额外考虑
- 协程:Python 中的协程可以使用生成器或 async/await 语法来实现。写成是一种轻量级的并发模型,可以在单线程内实现高并发和高吞吐量的应用
- 异步IO:Python 中的异步IO可以使用 asyncio模块来实现。异步IO可以在单线程内实现高并发和高吞吐量的应用,但需要注意异步IO的使用场景和实现细节
三、python中的拆包
Python的拆包是一种非常常用的技巧,它可以将序列或元组中的值拆分为单独的变量。拆包技巧可以让代码更加简洁和易读,同时也可以提高代码的性能。
案例:
a, b = [1, 2]
c, d = (1, 2)
e, f = {1, 2}
g, h = {'name': 'wu', 'age': 20}
print(a, b, c, d, e, f, g, h)
四、python中的解包
解包就是把一个容器拆开、分解,在Python中的解包是自动完成的。
注意:
- 自动捷豹支持一切可迭代对象
- python3中,支持更高级的解包操作,用星号操作使得等号左边的变量个数可以少于右边迭代对象中元素的个数
- 函数调用时,可以用*或者**解包可迭代对象,作为参数传递
- python3.5,函数调用和表达式中可支持更多的解包操作
五、什么是TCP?什么是UDP
TCP:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP:用户数据报协议,是一种面向无连接,不可靠、以数据报文段的形式传输的传输层通信协议
六、 什么是多线程?什么是进程
进程可以简单地理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多个线程构成的。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。多线程就是指一个进程中同时有多个线程正在执行。
多线程的缺点:
- 使用多线程,是很消耗资源,因为县城需要开辟内存。更多线程需要更多内存
- 影响系统性能,因为操作系统需要在线程之间来回切换
- 需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响
- 线程使用不当会发生很多问题
多进程:进程是程序在计算机上的依次执行活动,当你执行一个程序,你就启动了一个进程。凡是用于完成操作系统的各种功能的进程就是系统进程,而所有由你启动的进程都是用户进程。多进程就是指计算机同时执行对多个进程,一般是同时运行多个软件