Day10 多线程理论 开启线程

多线程:

多线程和多进程的不同是他们占用的资源不一样,

一个进程里边可以包含一个或多个进程,

进程的开销大,线程的开销小。

打个比方来说:创建一个进程,就是创建一个车间。创建一个线程,就是在一个车间创建一个流水线。



怎么去开启一个线程:

方法一(直接用默认的类):

 1 开启线程的方式一:使用替换threading模块提供的Thread
 2 from threading import Thread
 3 from multiprocessing import Process
 4
 5 def task():
 6     print(‘is running‘)
 7
 8 if __name__ == ‘__main__‘:
 9     t=Thread(target=task,)
10     # t=Process(target=task,)
11     t.start()
12     print(‘主‘)

方法二(自己定义一个类,继承系统的类):

 1 #开启线程的方式二:自定义类,继承Thread
 2 from threading import Thread
 3 from multiprocessing import Process
 4 class MyThread(Thread):
 5     def __init__(self,name):
 6         super().__init__()    #不破坏原有的类
 7         self.name=name
 8     def run(self):
 9         print(‘%s is running‘ %self.name)
10
11 if __name__ == ‘__main__‘:
12     t=MyThread(‘egon‘)
13     # t=Process(target=task,)
14     t.start()
15     print(‘主‘)


在同时开始多个线程和多个进程的时候,多个线程的pid是不一样的,多个线程的pid是一样的。

可以利用这段代码测试下:

from threading import Thread
from multiprocessing import Process
import os

def task():
    print(‘%s is running‘ %os.getpid())

if __name__ == ‘__main__‘:
    # t1=Thread(target=task,)
    # t2=Thread(target=task,)
    t1=Process(target=task,)
    t2=Process(target=task,)
    t1.start()
    t2.start()
    print(‘主‘,os.getpid())

多个线程是共享同一个进程内的资源的。

时间: 2024-12-25 06:12:07

Day10 多线程理论 开启线程的相关文章

python并发编程:多线程-开启线程的两种方式

一 threading模块介绍 multiprocess模块完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 方式一 from threading import Thread import time def sayhi(name): time.sleep(2) print("%s say hello" % name) if __name__ == '__main__': t = Thread(target=sayhi, args=('mik

多线程系列(2)线程池ThreadPool

上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情.可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止,显然是很麻烦的一件事情.还好.net framework为我们提供了线程池ThreadPool来帮助我们来管理这些线程,这样我们就不再需要手动地去终止这些线程.这一篇文章就让我们来学习一下线程池ThreadPool吧.关于它我想从以下几个方面进行总结. 认识线程池ThreadPool Thread

iOS开发多线程篇—创建线程

iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 -

iOS开发多线程理论介绍

前言 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 就我们日常生活的例子来说: (1)我打开一个视频软件,我开辟一个线程A让它执行下载任务,我开辟一个线程B,用来播放视频.我开辟两个线程后,这两个任务能同时执行,如果我开辟一个线程,只有下载任务完成,才能去执行播放任务. (2)线程相当于店里的服务员,一个服务员同时只能做一件事情,多顾几个服务员,就能同时做很多事情. 在了解多线程之前我们先来介绍一下进程和线程 进程 进程是操作系统中运行的程序专

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));            m_l

iOS开发多线程篇 03 —线程安全

iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 示例一: 示例二: 问题代码: 1 // 2 // YYViewController.m 3 // 05-线程安全 4 // 5 // Created by apple on 14-6-23. 6 // Copyright (c) 2014年 itcase.

7 并发编程-(线程)-开启线程的两种方式

thread/英 /θred/ 美 /θr?d/  线程 1.threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 2.开启线程的两种方式 2.1.方式一 from threading import Thread import time def task(name): print(f"{name} is running") time.sleep(2) print(f"{name} i

(8)什么是线程(如何开启线程)

为什么会出现线程 进程的缺点: 1.非常消耗资源,计算机不能无限开启子进程 2.如果开了过多的进程,cpu的切换进程的模式下是非常耗时的 因为进程的缺点,线程的出现就是为了解决进程的缺点,线程的开销小于进程 1.所以线程就是轻量级的进程 2.一个进程里面至少有一个线程 3.线程就是具体干活的,执行任务的 PS:进程相当于一座工厂,线程相当于干活的人 PS:进程是一个资源的实体单位,而cpu操作的最小单位是线程 理论案例: QQ是一个主进程 QQ内有几个功能 1.聊天 2.支付 3.视频 PS:如

17、多线程 (Thread、线程创建、线程池)

进程概念 *A:进程概念 *a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程的概念 *A:线程的概念 *a:线程:线程是进程中的一个执行单元(执行路径),负责当前进程中程序的执行, 一个进程中至少有一个线程.一个进程中是可以有多个线程的, 这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 深入线程的概念 *A:深入线程的概念 什么是多线程呢? 即就