多线程编程
kobejayandy
十多年互联网产品研发经验,历经华为、腾讯、字节跳动等公司,主要从事后端技术研发及技术管理工作(andyjaykobe)
展开
-
Java多线程之线程池深入分析(下)
一、数据结构与线程构造方法由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要求也很能够猜测出其数据结构出来。转载 2013-04-13 17:18:38 · 1487 阅读 · 1 评论 -
多线程服务器的典型适用场合
“服务器开发”包罗万象,本文所指的“服务器开发”一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget 不是长期运行的,httpd 是长期运行的。正名与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是转载 2014-03-11 23:08:49 · 1242 阅读 · 0 评论 -
多线程服务器的常用编程模型
本文主要讲我个人在多线程开发方面的一些粗浅经验。总结了一两种常用的线程模型,归纳了进程间通讯与线程同步的最佳实践,以期用简单规范的方式开发多线程程序。文中的“多线程服务器”是指运行在 Linux 操作系统上的独占式网络应用程序。硬件平台为 Intel x64 系列的多核 CPU,单路或双路 SMP 服务器(每台机器一共拥有四个核或八个核,十几 GB 内存),机器之间用百兆或千兆以太网连接。转载 2014-03-11 23:10:20 · 1268 阅读 · 0 评论 -
Java并发编程总结
多线程并发环境下,本质上要解决地是这两个问题:线程之间如何通信线程之间如何同步 在Windows操作系统中Java线程和内核线程一对一影射(_beginthread)在Linux操作系统中Java下使用pthread实现。Phtread在linux下有两种实现,linux 2.6内核缺省使用NPTL。也是一对一影射。Executors•这是一种任务分解。任务提供者和执行者•在本线转载 2014-01-08 23:16:00 · 1951 阅读 · 0 评论 -
Pthread锁机制
Pthreads提供了多种锁机制: (1) Mutex(互斥量):pthread_mutex_*** sleep-waiting, 上下文切换 (2) Spin lock(自旋锁):pthread_spin_*** busy-waiting (3) Condition Varia转载 2014-01-04 16:32:22 · 3781 阅读 · 0 评论 -
HttpClient多线程并发问题
这篇文章概括了怎样在多线程环境下安全的使用HttpClient。建立连接在HttpClient中使用多线程的一个主要原因是可以一次执行多个方法。在执行期间,每一个方法都使用一个HttpConnection实例。由于在同一时间多个连接只能安全地用于单一线程和方法和有限的资源,我们就必须确保连接分配给正确的方法。而MultiThreadedHttpConnectionManager完全可以转载 2013-11-24 17:21:57 · 56841 阅读 · 0 评论 -
解决多线程代码中的11个常见的问题
数据争用忘记同步粒度错误读写撕裂无锁定重新排序重新进入死锁锁保护戳记两步舞曲优先级反转实现安全性的模式不变性纯度隔离数据争用并发现象无处不在。服务器端程序长久以来都必须负责处理基本并发编程模型,而随着多核处理器的日益普及,客户端程序也将需要执行一些任务。随转载 2013-08-27 22:25:21 · 1287 阅读 · 0 评论 -
JVM线程资源同步及交互机制
1 JVM线程资源同步及交互机制 Java程序采用多线程的方式来支撑大量的并发请求处理,程序在多线程方式执行的情况下,复杂程度远高于单线程串行执行的程序。尤其是在多核或多 CPU系统中,多线程执行的程序所带来的最明显的问题是线程之间共同管理的资源的竞争及线程之间的交互。JVM的线程实现及调度方式(抢占式、协作式)取决于操作系统,超出了本书范围,本节中仅介绍JVM线程资源同步机制和线程之间的交转载 2013-08-19 23:05:35 · 1238 阅读 · 0 评论 -
线程池的原理和连接池的原理
线程池的原理: 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的转载 2013-04-21 00:36:43 · 1018 阅读 · 0 评论 -
ThreadPoolExecutor线程池
ThreadPoolExecutor的工作机制: 整个ThreadPoolExecutor的任务处理有4步操作: 第一步,初始的poolSize 第二步,当提交的任务数超过了corePoolSize,就进入了第二步操作。会将当前的runable提交到一个block queue中第三步,如果block queue是个有界队列,当队列满了之后就进入了第三步。如果poolS转载 2013-04-23 00:26:06 · 1133 阅读 · 0 评论 -
Java多线程之线程池深入分析(上)
线程池是并发包里面很重要的一部分,在实际情况中也是使用很多的一个重要组件。下图描述的是线程池API的一部分。广义上的完整线程池可能还包括Thread/Runnable、Timer/TimerTask等部分。这里只介绍主要的和高级的API以及架构和原理。大多数并发应用程序是围绕执行任务(Task)进行管理的。所谓任务就是抽象、离散的工作单元(unit of work)。把一个转载 2013-04-13 17:16:51 · 1665 阅读 · 0 评论 -
协程、线程和执行上下文
摘要: 本文介绍协程、线程及它们执行的上下文等概念,同时给出注意事项。协程是用户级的任务调度,线程是内核级的任务调度,而任务调度过程都涉及到上下文切换(保存与恢复),本文将从较为深刻的角度来阐述这些概念,及其相互关系。协程和线程线程在现代的系统里扮演的角色很重要,几乎一个现代一点的,稍微复杂大型一点的程序,往往都会引入线程,实现某种意义的并行。线程存在广泛的支持,从操作系统,到编译转载 2014-11-03 00:16:55 · 2521 阅读 · 0 评论