day29操作系统_ 应用程序 _ 并发_并行 _线程使用
2021/7/10 14:07:52
本文主要是介绍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操作系统_ 应用程序 _ 并发_并行 _线程使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23linux 系统宝塔查看网站访问的命令是什么?-icode9专业技术文章分享
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南