网络基础
OSI 7层
三次握手四次挥手
其他网络知识
mac
ip
子网掩码
网关
DHCP服务(路由器)
路由器
交换机
广播/单播
arp协议
DNS
补充
私有云/公有云
租服务器/域名
socket
服务端
监听IP和端口
等待客户端连接(阻塞)
收(阻塞)
发
客户端
连接服务端IP和端口(阻塞)
收(阻塞)
发
黏包
socketserver
多线程/多进程 + socket
面向对象多继承
操作系统/应用程序
操作中的“并发”
其他语言线程、进程
python中线程和进程(GIL锁)
python线程编写+锁
小爬虫
硬件
硬盘
cpu
主板
显卡
内存
电源
装系统(软件)
系统就是一个由程序员写出来软件,该软件用于控制计算机的硬件,让它们之间进行相互配合。
安软件(安装应用程序)
百度云
pycharm
并发,伪,由于执行速度特别快,人感觉不到迟钝
并行,真,创建10个人同时操作。
3.线程,进程
单进程,单线程的应用程序
print(666)
到底什么是线程?什么是进程?
python之际没有,python中调用的操作系统的线程和进程。
单进程,多线程的应用程序
代码
import threading print("666") def func(arg): print(arg) t = threading.Thread(target=func) t.start() print("end")
一个应用程序(软件),可以有多个进程(默认)
java
线程:
工作的最小单元
共享进程中所有的资源
每个线程可以分担一些任务,最终完成最后和结果。
进程:
独立开辟内存
进程之间的数据隔离
总结
操作系统帮助开发操作硬件。
程序员写好代码在操作系统上运行(依赖解释器)
python多线程情况下:
计算密集型操作:效率低。(GIL锁)
IO操作:效率高
python多进程的情况下:
计算密集型操作:效率高(浪费资源)
IO操作:效率高(浪费资源)
以后写python时:
IO密集型用多线程:文件/输入输出/socket网络通信
计算密集型用多进程
JAVA多线程情况下:
计算密集型操作:效率高
IO操作:效率高
python中线程和进程(GIL锁)
GIL锁,全局解释器锁。用于限制一个进程中同一时刻只有一个线程被cpu调动。
扩展:默认GIL锁在执行100个CPU指令(过期时间)
import time def func(arg): #获取当前执行该函数的线程的对象 t = thredding.current_thread() #根据当前线程对象获取当前线程名称 name = t.getName() time.sleep(2) print(name,arg) t1 = threading.Thread(target=func,args=(3,)) #为True就让主进程不等待直接执行完 #为False就让主进程等待子进程,默认时等待的 t1.setDaemon(True) #设置名 t1.setName("哇哈哈") t1.start #无参数,让主线程在这里等着,等到子线程t1执行完毕,才可以继续往下走。 #有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走。 t1.join(2)
import therading #1 def func(arg): print(arg) t1 = threading.Thread(target=func,args=(11,)) t1.start #2 class MyThread(threading.Thread): def run(self): print(1111,self._args,self._kwargs) t1 = MyThread(args=(11,)) t1.start() t2 = MyThread(args=(22,)) t2.start()
import time import threading lock = threading.RLock() n = 10 def task(i): print("这段代码不加锁") lock.acquire()#加锁 global n print("当前线程",i,"读取到的n值为:",n) n = i time.sleep(1) print("当前线程",i,"修改n值为:",n) lock.release()#解锁 for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()
应用程序/进程/线程的关系?
为什么要创建线程?
由于线程时cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(JAVA/C#)
为什么要创建进程?
进程和进程之间做数据隔离(Java/c#)
python
python中存在一个GIL锁
造成:多线程无法利用多核优势。
解决:开多进程处理(浪费资源)
线程的创建
Thread
MyTread
其他
join
setDeanon
setName
threading.current_thread()
锁
获得
释放
网络基础
OSI 7层
三次握手四次挥手
其他网络知识
mac
ip
子网掩码
网关
DHCP服务(路由器)
路由器
交换机
广播/单播
arp协议
DNS
补充
私有云/公有云
租服务器/域名
socket
服务端
监听IP和端口
等待客户端连接(阻塞)
收(阻塞)
发
客户端
连接服务端IP和端口(阻塞)
收(阻塞)
发
黏包
socketserver
多线程/多进程 + socket
面向对象多继承
操作系统/应用程序
操作中的“并发”
其他语言线程、进程
python中线程和进程(GIL锁)
python线程编写+锁
小爬虫
硬件
硬盘
cpu
主板
显卡
内存
电源
装系统(软件)
系统就是一个由程序员写出来软件,该软件用于控制计算机的硬件,让它们之间进行相互配合。
安软件(安装应用程序)
百度云
pycharm
并发,伪,由于执行速度特别快,人感觉不到迟钝
并行,真,创建10个人同时操作。
3.线程,进程
单进程,单线程的应用程序
print(666)
到底什么是线程?什么是进程?
python之际没有,python中调用的操作系统的线程和进程。
单进程,多线程的应用程序
代码
import threading print("666") def func(arg): print(arg) t = threading.Thread(target=func) t.start() print("end")
一个应用程序(软件),可以有多个进程(默认)
java
线程:
工作的最小单元
共享进程中所有的资源
每个线程可以分担一些任务,最终完成最后和结果。
进程:
独立开辟内存
进程之间的数据隔离
总结
操作系统帮助开发操作硬件。
程序员写好代码在操作系统上运行(依赖解释器)
python多线程情况下:
计算密集型操作:效率低。(GIL锁)
IO操作:效率高
python多进程的情况下:
计算密集型操作:效率高(浪费资源)
IO操作:效率高(浪费资源)
以后写python时:
IO密集型用多线程:文件/输入输出/socket网络通信
计算密集型用多进程
JAVA多线程情况下:
计算密集型操作:效率高
IO操作:效率高
python中线程和进程(GIL锁)
GIL锁,全局解释器锁。用于限制一个进程中同一时刻只有一个线程被cpu调动。
扩展:默认GIL锁在执行100个CPU指令(过期时间)
import time def func(arg): #获取当前执行该函数的线程的对象 t = thredding.current_thread() #根据当前线程对象获取当前线程名称 name = t.getName() time.sleep(2) print(name,arg) t1 = threading.Thread(target=func,args=(3,)) #为True就让主进程不等待直接执行完 #为False就让主进程等待子进程,默认时等待的 t1.setDaemon(True) #设置名 t1.setName("哇哈哈") t1.start #无参数,让主线程在这里等着,等到子线程t1执行完毕,才可以继续往下走。 #有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走。 t1.join(2)
import therading #1 def func(arg): print(arg) t1 = threading.Thread(target=func,args=(11,)) t1.start #2 class MyThread(threading.Thread): def run(self): print(1111,self._args,self._kwargs) t1 = MyThread(args=(11,)) t1.start() t2 = MyThread(args=(22,)) t2.start()
import time import threading lock = threading.RLock() n = 10 def task(i): print("这段代码不加锁") lock.acquire()#加锁 global n print("当前线程",i,"读取到的n值为:",n) n = i time.sleep(1) print("当前线程",i,"修改n值为:",n) lock.release()#解锁 for i in range(10): t = threading.Thread(target=task,args=(i,)) t.start()
应用程序/进程/线程的关系?
为什么要创建线程?
由于线程时cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(JAVA/C#)
为什么要创建进程?
进程和进程之间做数据隔离(Java/c#)
python
python中存在一个GIL锁
造成:多线程无法利用多核优势。
解决:开多进程处理(浪费资源)
线程的创建
Thread
MyTread
其他
join
setDeanon
setName
threading.current_thread()
锁
获得
释放