Linux教程

day29操作系统_ 应用程序 _ 并发_并行 _线程使用

本文主要是介绍day29操作系统_ 应用程序 _ 并发_并行 _线程使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

day29

内容回顾

  1. 网络基础

    • OSI 7层

    • 三次握手四次挥手

    • 其他网络知识

      • mac

      • ip

      • 子网掩码

      • 网关

      • DHCP服务(路由器)

      • 路由器

      • 交换机

      • 广播/单播

      • arp协议

      • DNS

    • 补充

      • 私有云/公有云

      • 租服务器/域名

  2. socket

    • 服务端

      • 监听IP和端口

      • 等待客户端连接(阻塞)

      • 收(阻塞)

    • 客户端

      • 连接服务端IP和端口(阻塞)

      • 收(阻塞)

    • 黏包

  3. socketserver

    • 多线程/多进程 + socket

    • 面向对象多继承

今日内容

  1. 操作系统/应用程序

  2. 操作中的“并发”

  3. 其他语言线程、进程

  4. python中线程和进程(GIL锁)

  5. python线程编写+锁

  6. 小爬虫

今日详细

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

    • 线程:

      • 工作的最小单元

      • 共享进程中所有的资源

      • 每个线程可以分担一些任务,最终完成最后和结果。

    • 进程:

      • 独立开辟内存

      • 进程之间的数据隔离

  • 总结

    1. 操作系统帮助开发操作硬件。

    2. 程序员写好代码在操作系统上运行(依赖解释器)

    3. python多线程情况下:

      • 计算密集型操作:效率低。(GIL锁)

      • IO操作:效率高

    4. python多进程的情况下:

      • 计算密集型操作:效率高(浪费资源)

      • IO操作:效率高(浪费资源)

    5. 以后写python时:

      • IO密集型用多线程:文件/输入输出/socket网络通信

      • 计算密集型用多进程

    6. JAVA多线程情况下:

      • 计算密集型操作:效率高

      • IO操作:效率高

    7. 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()

总结

  1. 应用程序/进程/线程的关系?

  2. 为什么要创建线程?

    • 由于线程时cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(JAVA/C#)

  3. 为什么要创建进程?

    • 进程和进程之间做数据隔离(Java/c#)

  4. python

    1. python中存在一个GIL锁

      • 造成:多线程无法利用多核优势。

      • 解决:开多进程处理(浪费资源)

    2. 线程的创建

      • Thread

      • MyTread

    3. 其他

      • join

      • setDeanon

      • setName

      • threading.current_thread()

      • 获得

      • 释放

day29

内容回顾

  1. 网络基础

    • OSI 7层

    • 三次握手四次挥手

    • 其他网络知识

      • mac

      • ip

      • 子网掩码

      • 网关

      • DHCP服务(路由器)

      • 路由器

      • 交换机

      • 广播/单播

      • arp协议

      • DNS

    • 补充

      • 私有云/公有云

      • 租服务器/域名

  2. socket

    • 服务端

      • 监听IP和端口

      • 等待客户端连接(阻塞)

      • 收(阻塞)

    • 客户端

      • 连接服务端IP和端口(阻塞)

      • 收(阻塞)

    • 黏包

  3. socketserver

    • 多线程/多进程 + socket

    • 面向对象多继承

今日内容

  1. 操作系统/应用程序

  2. 操作中的“并发”

  3. 其他语言线程、进程

  4. python中线程和进程(GIL锁)

  5. python线程编写+锁

  6. 小爬虫

今日详细

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

    • 线程:

      • 工作的最小单元

      • 共享进程中所有的资源

      • 每个线程可以分担一些任务,最终完成最后和结果。

    • 进程:

      • 独立开辟内存

      • 进程之间的数据隔离

  • 总结

    1. 操作系统帮助开发操作硬件。

    2. 程序员写好代码在操作系统上运行(依赖解释器)

    3. python多线程情况下:

      • 计算密集型操作:效率低。(GIL锁)

      • IO操作:效率高

    4. python多进程的情况下:

      • 计算密集型操作:效率高(浪费资源)

      • IO操作:效率高(浪费资源)

    5. 以后写python时:

      • IO密集型用多线程:文件/输入输出/socket网络通信

      • 计算密集型用多进程

    6. JAVA多线程情况下:

      • 计算密集型操作:效率高

      • IO操作:效率高

    7. 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()

总结

  1. 应用程序/进程/线程的关系?

  2. 为什么要创建线程?

    • 由于线程时cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(JAVA/C#)

  3. 为什么要创建进程?

    • 进程和进程之间做数据隔离(Java/c#)

  4. python

    1. python中存在一个GIL锁

      • 造成:多线程无法利用多核优势。

      • 解决:开多进程处理(浪费资源)

    2. 线程的创建

      • Thread

      • MyTread

    3. 其他

      • join

      • setDeanon

      • setName

      • threading.current_thread()

      • 获得

      • 释放

这篇关于day29操作系统_ 应用程序 _ 并发_并行 _线程使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!