zoukankan      html  css  js  c++  java
  • 进程与线程

    1.理论
    
    
    - 互斥锁的作用:
      让并发变成串行, 牺牲了执行效率, 保证了数据安全。
    
    - 队列: 
      必须遵循先进先出。
    
    - IPC(进程间通信):
      进程间数据是相互隔离的,若想实现进程间通信,可以利用队列.
    
    - 生产者与消费者:
      生产者: 生产数据的
      消费者: 使用数据的
      	解决供需不平衡问题。
    
    - 1.什么是线程?
      线程与进程都是虚拟单位,目的是为了更好地描述某种事物.
    
       - 进程: 资源单位
    
          - 线程: 执行单位
    
    - 2.为什么要使用线程?
      节省内存资源.
    
      	- 开启进程:
      			1) 开辟一个名称空间,每开启一个进程都会占用一份内存资源.
      			2) 会自带一个线程
    
       - 开启线程
         1) 一个进程可以开启多个线程
         2) 线程的开销远小于进程.
    
    注意: 单个进程下开启的线程不能实现并行, 只能实现并发, 开启多个进程并且电脑是多核的情况下才能实现并行.
    
    - 线程之间数据是共享的.
     
    
    2.手撸创建进程与创建线程的两种方式
    
    - 创建进程
     
      from multiprocessing import Process
      import time
      def task(name):
        print(f'{name} is start')
        time.sleep(1)
        print(f'{name} is over')
    
    if __name__ == '__main__':
        p = Process(target=task, args=('tank',))
        p.start()
    
    class MyProcess(Process):
        def run(self):
            print('hello tank')
            time.sleep(1)
            print('bye')
    
    if __name__ == '__main__':
        p = MyProcess()
        p.start()
        print('主')
    
    
    - 创建线程
    
      from threading import Thread
      import time
    
    # 方式一:
    
    def task(name):
        print(f'{name} is running...')
        time.sleep(1)
        print(f'{name} is over...')
    
    if __name__ == '__main__':
        t1 = Thread(target=task, args=('jason', ))
        t1.start()
    
    
    # 方式二:
    
    class MyThread(Thread):
        def __init__(self, name):
            super().__init__()
            self.name = name
    
        def run(self) -> None:
            print(f'{self.name} is running...')
            time.sleep(1)
            print(f'{self.name} is over...')
    
    if __name__ == '__main__':
        t = MyThread('线程1')
        t.start()
        print('主')
    
    
  • 相关阅读:
    PHP防采集方法代码
    Borland C++ Builder 编译绿色Exe程序
    关于结构体构造函数使用总结
    Ubuntu18下移植飞凌的QT4.8.5
    qt在arm平台中,把鼠标指针消失。
    ubuntu下gcc g++操作
    Ubuntu下Qt_Creator支持搜狗中文输入
    ubuntu18.04.1降级交叉编译器 arm-linux-gcc-4.4.3
    error: narrowing conversion of '4323168000' from 'long int' to 'float' inside { } [-Wnarrowing] }; ^
    #pragma pack(1)的意义
  • 原文地址:https://www.cnblogs.com/jinhongquan/p/11721927.html
Copyright © 2011-2022 走看看