首页 > 系统相关 >简单聊聊线程跟进程

简单聊聊线程跟进程

时间:2024-09-25 23:21:58浏览次数:9  
标签:__ join worker start 线程 聊聊 进程

简单聊聊线程跟进程

在编程中,我们常常会遇到“线程”和“进程”这两个词。它们都是帮助我们同时执行多个任务的工具,但它们之间有一些重要的区别。让我们用简单的语言来聊聊这两个概念,同时提供一些代码示例,让你更容易理解。

 什么是进程?

进程可以看作是计算机上运行的一个独立程序。每个进程都有自己的内存空间,像是一个单独的房间,里面有自己的家具和物品。进程之间互不干扰,所以一个进程的崩溃不会影响其他进程。

优点:

- 稳定性高:如果一个进程出了问题,其他进程依然可以正常工作。

- 可以充分利用多核 CPU,提升性能。

缺点:

- 启动和关闭进程的开销比较大,比较耗时。

- 进程间的通信比较复杂,需要一些额外的工具,比如队列或管道。

在 Python 中,我们可以使用 `multiprocessing` 模块来创建进程。下面是一个简单的示例:

from multiprocessing import Process

def worker():

    print("Hello from a process!")

if __name__ == "__main__":

    p = Process(target=worker)

    p.start()

    p.join()   等待进程结束

在这个例子中,我们定义了一个简单的 `worker` 函数,然后创建了一个进程来运行这个函数。`start()` 方法启动进程,`join()` 方法确保主程序等待进程完成后再退出。

 什么是线程?

线程可以看作是进程中的一个小执行单位。多个线程共享同一个进程的内存,就像几个室友住在同一个公寓里。线程之间的通信很简单,因为它们共享同样的空间。

优点:

- 启动和关闭的速度快,开销小。

- 线程之间的数据共享很方便。

缺点:

- Python 中有个叫全局解释器锁(GIL)的东西,可能会限制 CPU 密集型任务的性能。

- 由于共享数据,容易出现竞争条件,导致一些意想不到的问题。

在 Python 中,我们可以使用 `threading` 模块来创建线程。下面是一个简单的示例:

import threading

def worker():

    print("Hello from a thread!")

if __name__ == "__main__":

    t = threading.Thread(target=worker)

    t.start()

    t.join()   等待线程结束

在这个例子中,我们定义了一个 `worker` 函数,然后创建了一个线程来运行这个函数。与进程类似,`start()` 方法启动线程,`join()` 方法等待线程完成。

---

理解进程和线程的区别对于初学者非常重要:

1. 选择合适的工具:如果你的任务是 CPU 密集型(如复杂计算),选择进程。如果是 I/O 密集型(如网络请求),选择线程。这可以帮助你更高效地使用计算资源。

2. 注意安全问题:在使用线程时,要特别注意数据安全问题,尽量避免多个线程同时修改共享数据,使用锁机制来保护数据。

3. 实践是关键:编程是一门实践性很强的技能。多动手练习这些概念,尝试写一些小程序来加深理解。

标签:__,join,worker,start,线程,聊聊,进程
From: https://blog.csdn.net/m0_62710548/article/details/142535357

相关文章

  • 进程和线程的区别;线程的多种创建方式;Thread 类及常见方法;线程的状态
    文章目录进程和线程的区别线程的创建方式继承Thread,重写run(创建单独的类/匿名内部类)实现Runnable,重写run(创建单独的类/匿名内部类)实现Callable,重写call(创建单独的类/匿名内部类)使用lambda表达式ThreadFactory线程工厂线程池Thread类及常见方法Thread的常见属性启动一......
  • Redis6 多线程模型
    优质博文:IT-BLOG-CN一、单线程的优缺点对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非常快。优点&缺点:【1】优点:不存在锁的竞争问题和......
  • 聊聊蓝牙配对技术-CTKD OVER BR/EDR
    背景最近一直在调试耳机的BLEAUDIO功能,一次测试中把CTKD(Cross-transportkeyderivation)宏开关给关了,发现手机完全不会去连接耳机的LEAUDIO服务,甚至BLE连接都不会建立。说明手机连接双模蓝牙耳机的机制是:先去配对BR/EDR,然后通过CTKD的方式去建立BLE连接。带着好奇心去一......
  • 银行存取款多线程
    importjava.util.Random;importjava.lang.*;/***银行存取款**@authorLaccoliths*/publicclassBank{privateintcount=0;/***存钱*@parammoney:存钱数*/publicsynchronizedvoidaddMoney(intmoney){count+......
  • 【线程】POSIX信号量---基于环形队列的生产消费者模型
    信号量概念这篇文章是以前写的,里面讲了 SystemV的信号量的概念,POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但POSIX可以用于线程间同步。信号量的概念POSIX信号量的接口初始化信号量参数:pshared:0表示线程间共享,非0表示进程......
  • Linux 基础入门操作 第十章 多线程实现
    10线程介绍线程是进程的一条执行路径。每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间......
  • initrd&init进程
    initrd的全名是 initramdisk,是一个启动时存在于内存的文件系统。kernal到initrd的流程在GRUB加载kernel时,kernel会先在内存中制造一个rootfs当做临时的空间供系统使用,接下来,kernel便会将initrd当做是一个系统,将其mount到rootfs上启动。引入initrd的目的是为了把kernel的启......
  • java-重启异常断掉的线程和监控线程状态
    java-重启异常断掉的线程和监控线程状态背景主要代码打印结果总结背景有一个线程,可能会因为异常而终止掉。为了监控这个线程,我又启动一个线程去监控。主要代码代码主要是由两个线程和两个可以产生异常的方法,内容跟简单,如下importjava.time.LocalDateTime;impor......
  • JMeter各种线程组
    Jmeter线程组之bzm-ConcurrencyThreadGroup(递增式并发线程组)-CSDN博客Jmeter线程组之bzm-Free-FormArrivalsThreadGroup_jmeterbzm线程组-CSDN博客Jmeter线程组之jp@gc-SteppingThreadGroup(deprecated)_jmetersteppingthreadgroup(deprecated)-CSDN博客......
  • Java 性能调优:调整 GC 线程以获得最佳结果
        垃圾回收(GC)在Java的内存管理中起着重要作用。它有助于回收不再使用的内存。垃圾回收器使用自己的线程集来回收内存。这些线程称为GC线程。有时,JVM最终可能会有太多或太少的GC线程。在这篇文章中,我们将讨论为什么JVM最终会拥有太多/太少的GC线程,它的后果,以及解......