day29操作系统_ 应用程序 _ 并发_并行 _线程使用
作者:互联网
day29
内容回顾
-
网络基础
-
OSI 7层
-
三次握手四次挥手
-
其他网络知识
-
mac
-
ip
-
子网掩码
-
网关
-
DHCP服务(路由器)
-
路由器
-
交换机
-
广播/单播
-
arp协议
-
DNS
-
-
补充
-
私有云/公有云
-
租服务器/域名
-
-
-
socket
-
服务端
-
监听IP和端口
-
等待客户端连接(阻塞)
-
收(阻塞)
-
发
-
-
客户端
-
连接服务端IP和端口(阻塞)
-
收(阻塞)
-
发
-
-
黏包
-
-
socketserver
-
多线程/多进程 + socket
-
面向对象多继承
-
今日内容
-
操作系统/应用程序
-
操作中的“并发”
-
其他语言线程、进程
-
python中线程和进程(GIL锁)
-
python线程编写+锁
-
小爬虫
今日详细
1.操作系统/应用程序
-
硬件
-
硬盘
-
cpu
-
主板
-
显卡
-
内存
-
电源
-
-
装系统(软件)
-
系统就是一个由程序员写出来软件,该软件用于控制计算机的硬件,让它们之间进行相互配合。
-
-
安软件(安装应用程序)
-
qq
-
百度云
-
pycharm
-
2.并发和并行
-
并发,伪,由于执行速度特别快,人感觉不到迟钝
-
并行,真,创建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指令(过期时间)
-
-
3.线程使用
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)
3.1面向对象多线程
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()
3.2锁的初步认识
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()
-
-
锁
-
获得
-
释放
-
-
day29
内容回顾
-
网络基础
-
OSI 7层
-
三次握手四次挥手
-
其他网络知识
-
mac
-
ip
-
子网掩码
-
网关
-
DHCP服务(路由器)
-
路由器
-
交换机
-
广播/单播
-
arp协议
-
DNS
-
-
补充
-
私有云/公有云
-
租服务器/域名
-
-
-
socket
-
服务端
-
监听IP和端口
-
等待客户端连接(阻塞)
-
收(阻塞)
-
发
-
-
客户端
-
连接服务端IP和端口(阻塞)
-
收(阻塞)
-
发
-
-
黏包
-
-
socketserver
-
多线程/多进程 + socket
-
面向对象多继承
-
今日内容
-
操作系统/应用程序
-
操作中的“并发”
-
其他语言线程、进程
-
python中线程和进程(GIL锁)
-
python线程编写+锁
-
小爬虫
今日详细
1.操作系统/应用程序
-
硬件
-
硬盘
-
cpu
-
主板
-
显卡
-
内存
-
电源
-
-
装系统(软件)
-
系统就是一个由程序员写出来软件,该软件用于控制计算机的硬件,让它们之间进行相互配合。
-
-
安软件(安装应用程序)
-
qq
-
百度云
-
pycharm
-
2.并发和并行
-
并发,伪,由于执行速度特别快,人感觉不到迟钝
-
并行,真,创建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指令(过期时间)
-
-
3.线程使用
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)
3.1面向对象多线程
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()
3.2锁的初步认识
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()
-
-
锁
-
获得
-
释放
-
-
标签:day29,python,应用程序,t1,print,线程,进程,多线程 来源: https://www.cnblogs.com/fxy1024/p/14993556.html