码迷,mamicode.com
首页 > 编程语言 > 详细

进程与线程

时间:2019-10-22 20:25:45      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:rom   理论   tar   必须   进程间通信   pytho   self   并发   int   

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('主')

进程与线程

标签:rom   理论   tar   必须   进程间通信   pytho   self   并发   int   

原文地址:https://www.cnblogs.com/jinhongquan/p/11721927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!