以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译):

相同线程(同一线程)是一种并发模型,其中单线程系统扩展到N个单线程系统。结果是并行运行的N个单线程系统。

同一个线程系统不是一个纯粹的单线程系统,因为它包含多个线程。但是,每个线程都像单线程系统一样运行。

为什么是单线程系统?

你可能会想知道为什么有人今天会设计单线程系统。单线程系统得到普及,因为它们的并发模型比多线程系统简单得多。单线程系统不与其他线程共享任何数据。这使得单线程可以使用非并发数据结构,并更好地利用CPU和CPU缓存。

不幸的是,单线程系统不能充分利用现代CPU。现代CPU通常带有2个或4个以上的内核。每个核心都可以作为一个单独的CPU。单线程系统只能使用其中一个核心,如下所示:

相同线程,单线程缩放

为了利用CPU中的所有内核,可以扩展单线程系统以利用整个计算机。

每个CPU一个线程

相同线程的系统通常在计算机中每个CPU运行一个线程。如果计算机包含4个CPU或4个内核的CPU,则运行4个同一线程系统(4个单线程系统)的实例是正常的。下图显示了这一原则:

没有共享状态

同一个线程系统看起来类似于多线程系统,因为同一个线程系统在其中运行了多个线程。但有一个微妙的区别。

同线程和多线程系统之间的区别在于同一线程系统中的线程不共享状态。没有共享内存,线程同时访问。没有并发数据结构等,线程共享数据。这个区别如下所示:

缺少共享状态是每个线程如果是单线程系统的行为。然而,由于同一线程系统可以包含多个线程,因此它不是真正的“单线程系统”。由于缺乏一个更好的名字,我发现更精确地称这个系统是一个相同的线程系统,而不是一个“单线程设计的多线程系统”。相同线程更容易说明,更容易理解。

相同线程基本上意味着数据处理保持在同一个线程内,并且同一线程系统中的线程不会同时共享数据。

负荷分配

显然,同一线程系统需要共享运行的单线程实例之间的工作负载。如果没有,只有一个实例将获得任何工作,并且该系统实际上将是单线程的。

正确分配负载在不同实例上的方式取决于系统的设计。下面我将介绍几个。

单线程微服务器

如果你的系统由多个微服务器组成,则每个微服务器都可以以单线程模式运行。当你将多个单线程微服务部署到同一台机器时,每个微服务器都可以在单个CPU上运行单个线程。

微服务不会自然地共享任何数据,所以微服务是同一线程系统的好例子。

带有分片数据的服务

如果你的系统实际上需要共享数据,或至少是数据库,则可以分割数据库。分片表示数据在多个数据库之间分配。数据通常被分割,使得彼此相关的所有数据位于同一数据库中。例如,属于某个“所有者”实体的所有数据将被插入同一数据库。分片不在本教程的范围之内,因此你将不得不搜索有关该主题的教程。

线程通信

如果同一线程中的线程需要进行通信,则通过消息传递来实现。想要向线程A发送消息的线程可以通过生成消息(字节序列)来实现。线程B可以复制该消息(字节序列)并读取它。通过复制消息线程B确保线程A在线程B读取时线程A无法修改消息。一旦它被复制,它是不可变的线程A.

通过消息传递的线程通信如下所示:

线程通信可以通过队列,管道,unix套接字,TCP套接字等进行。无论什么只要适合你的系统即可。

更简单的并发模型

在同一线程系统中自己的线程中运行的每个系统都可以像单线程那样被实现。这意味着内部并发模型比线程共享状态变得简单得多。你不必担心并发数据结构和数据结构可能导致的所有并发问题。

插图

以下是单线程,多线程和同线程系统的图示,因此你可以更容易地了解它们之间的区别。

第一个例子显示了一个单线程系统。

第二个例子显示了线程共享数据的多线程系统。

第三个例子显示了一个具有2个线程的同一线程系统,它们分开数据,通过传递消息来进行通信。

5、Java并发性和多线程-相同线程的更多相关文章

  1. java 并发性和多线程 -- 读感 (一 线程的基本概念部分)

    1.目录略览      线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程.      线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...

  2. Java 并发和多线程(一) Java并发性和多线程介绍[转]

    作者:Jakob Jenkov 译者:Simon-SZ  校对:方腾飞 http://tutorials.jenkov.com/java-concurrency/index.html 在过去单CPU时 ...

  3. Java并发性和多线程

    Java并发性和多线程介绍   java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题, ...

  4. Java并发性和多线程介绍

    java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题,多开线程就好: 快速响应,异步式 ...

  5. Java高级教程:Java并发性和多线程

    Java并发性和多线程: (中文,属于人工翻译,高质量):http://ifeve.com/java-concurrency-thread-directory/ (英文):http://tutoria ...

  6. 15、Java并发性和多线程-线程通讯

    以下内容转自http://ifeve.com/thread-signaling/: 线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 例如,线程B可以等待线程 ...

  7. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  8. 1、Java并发性和多线程-并发性和多线程介绍

    以下内容转自http://ifeve.com/java-concurrency-thread/: 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行 ...

  9. Java并发编程、多线程、线程池…

    <实战java高并发程序设计>源码整理https://github.com/petercao/concurrent-programming/blob/master/README.md Ja ...

随机推荐

  1. 网络爬虫之scrapy框架(CrawlSpider)

    一.简介 CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能之外,还派生了其自己独有的更强大的特性和功能.其中最显著的功能就是"LinkExtractor ...

  2. magento getUrl函数跳转admin模块问题

    在用以下代码时,跳转后的url里面会是空的,即没有admin这个值 $this->getUrl('admin/catalog_product/edit', array('id' => $c ...

  3. MySQL与Sqlserver数据获取

    由于项目要求,一个.net mvc登录注册的东西网站必须放弃sqlserver数据去使用MySQL数据库,因此我遇到了一些问题,并找出相应的解决方法, 因为sqlserver跟MySQL的数据引擎不同 ...

  4. duilib入门问题集

    问:如何把资源放入zip?答: 先SetResourcePath设置资源目录,再SetResourceZip设置压缩资源文件名 问:如何设置窗体的初始化大小?答:设置XML文件的Window标签的si ...

  5. LN : leetcode 515 Find Largest Value in Each Tree Row

    lc 515 Find Largest Value in Each Tree Row 515 Find Largest Value in Each Tree Row You need to find ...

  6. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  7. 8月中旬之后的学习计划 --- react

    这段时间快活了,放纵了,玩hi了,接下来该好好的学习新知识了. 鉴于目前业界比较火的前端js框架有react.vue,决定先从react开始学习.之前有简单的接触过它的一些基本的语法知识,这次准备全面 ...

  8. 15年第六届蓝桥杯第七题_(string)

    手链样式 小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙.他想用它们串成一圈作为手链,送给女朋友.现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢? 请你提交该整数.不要填写任 ...

  9. HDU_1864_最大报销额_01背包

    最大报销额 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  10. ThinkPHP---插件highcharts

    [一]概论 (1)介绍 基于jquery开发的国外图标插件,统计图,折线图,饼状图等常常用到. 国内也有一款类似插件echarts,由百度开发. (2)官网:www.highcharts.com    ...