内卷老员工之同线程系统

307 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

同线程系统

同线程可以认为是一种并发模型,从一个单线程系统扩展到n个单线程系统,结果是n个单线程系统并行运行。同线程系统不是单纯的单线程系统,因为它包含多个线程。但是每个线程都像单线程系统一样独立运行。

单线程系统

单线程系统之所以流行,是因为他们比多线程系统简单的多。单线程系统并不与其他线程共享任何数据或状态。这使得单线程系统可以使用非并发数据结构,更好的利用cpu和cpu缓存。然而不幸的是,现代cpu一般有多个内核,每个内核都有单独的cpu,单线程系统只能使用其中一个内核。

同线程,单线程系统扩展

为了充分利用系统内核,可以横向扩展单线程系统利用整个计算机。

每个cpu利用一个线程

同线程系统通常在计算机每个cpu运行一个线程,如果一台电脑有4个cpu,或者一个有四核的cpu,那么运行4个单线程系统是很正常的。

无共享状态

同线程系统表面上类似于多线程系统,因为同线程系统内部同样运行着多个线程,但存在微妙的区别。

  • 同线程系统与多线程系统的区别主要在于无共享状态。没有线程并发访问的共享内存,也没有并发访问的数据结构。共享状态的缺乏使得每个线程类似于一个单独的线程。同线程基本上是指数据处理停留在同一个线程内,同线程系统中没有线程并发共享数据。也就是无共享状态并发。

负荷分配

同线程系统需要在运行的单线程实例之间分担工作负载。

单线程微服务

如果系统以多个微服务运行,每个微服务采用单线程执行,当多个微服务部署到同一台机器时,每个微服务会采用单独的线程运行。这是同线程系统的一个典型实例。

具有分片数据的服务

如果系统需要共享数据,至少共享一个数据库,那么可以对数据库进行分片操作。

线程通信

如果同线程系统需要进行线程通信,那么可以采用消息传递来实现。线程a想于线程b进行通信,可以由线程a生成消息,由线程b进行读取。线程通信可以通过队列、管道、unix 套接字、TCP 套接字等进行。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。