线程理论之大白话

Posted gzying-01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程理论之大白话相关的知识,希望对你有一定的参考价值。

什么是线程?

  把一个进程比喻为一个车间,那么线程就是车间里面的一条条流水线。一个车间可以有多条流水线,流水线属于车间。一个车间的工作过程是一个进程,一个流水线的工作过程是一个线程。进程是操作系统资源分配的最小单位(生产科3号车间负责生产3万件包装纸箱),线程是cup调度的最小单位(3号车间里面的每一条生产线负责生产纸箱这个具体的任务)。

多线程的概念?

  就是一个进程中存在多条线程。多线程是数据共享的(共享进程中的空间地址啥的),就是3号车间有多条流水线,都共用了一个车间的资源。

多线程的应用举例:

  办公三件套之word为例,打开word软件就开启了一个进程,这个进程至少要干几件事儿,1监控键盘输入;2处理文字;3定时自动保存文字信息等,这几件事儿操作的都是同一块数据,所以不能使用多进程(进程间数据隔离啊),只能在一个进程里并发的开启三个县城,如果是单线程,那就只能是键盘输入时,不能处理文字和自动保存,自动保存时又不能打字。

开启线程的两种方式:
  multiprocess模块完全模仿了threading模块的接口,二者在使用层面,有很大的相似性。

  方式一:

from threading import Thread
import time


def sayhi(name):
    time.sleep(2)
    print(say hi %s  % name)

if __name__ == __main__:
    t = Thread(target=sayhi,args=(cariee,))
    t.start()
    print(主线程)

  方式二:

from threading import Thread
import time


class Sayhi(Thread):  # 创建了进程Thread

    def __init__(self,name):
        super().__init__()  # Thread的__init__方法很重要,通过super()调用
        self.name = name

    def run(self):
        time.sleep(2)
        print(%s say hi % self.name)

if __name__ == __main__:
    t = Sayhi(cariee)
    t.start()
    print(主线程)

多线程和多进程的区别:
  1线程的创建开销小于进程创建的开销

  2进程间数据隔离,线程间数据共享

Thread对象的其他属性和方法:

  .isAlive(): 返回线程是否‘活着’

  .getName():返回线程名

  .setName():设置线程名

threading模块提供了一些方法:

  threading.currentThread():返回当前的线程变量

  threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程

  threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果

  



以上是关于线程理论之大白话的主要内容,如果未能解决你的问题,请参考以下文章

白话机器学习算法理论+实战之支持向量机(SVM)

白话系列之IOC,三个类实现简单的Ioc

白话强化学习(理论+代码)

httpd笔记之理论详解优化配置(Apache)web入门

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]