Java多线程(一)之基本概念

CPU核心数和线程数的关系

目前主流CPU有双核、三核和四核,六核等。增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的。一般情况下它们是1:1对应关系,也就是说四核CPU一般拥有四个线程。但 Intel引入超线程技术后,使核心数与线程数形成1:2的关系。比如常见的双核四线程,就是使用了超线程技术。

CPU时间片轮转机制

平时在开发的时候,感觉并没有受cpu核心数的限制,想启动线程就启动线程,这是因为操作系统提供了一种CPU时间片轮转机制。又称RR调度。

时间片轮转算法的基本思想是:根据先进先出原则,系统将所有的就绪进程排成队列(就绪队列)。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。每次调度时,系统把CPU分配给队列首进程,并让其执行分配的时间片,如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结来,则CPU当即进行切换。当进程用完它的时间片后,它被移到队列的末尾。

使用时间片轮转调度从一个进程切换到另一个进程是需要定时间的,包括保存和装入寄存器值及内存映像,更新各种表格和队列等。假如进程切( processwitch),有时称为上下文切换( context switch)。因此,时间片设得太短会导致过多的进程切换,降低了CPU效率:而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100ms通常是一个比较合理的折衷。

什么是进程和线程

进程是程序运行资源分配的最小单位。
线程是cPU调度的最小单位,必须依赖于进程而存在。

进程

进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘10等。进程和进程之间是相互独立的。进程是程序在计算机上的一次执行活动。当运行一个程序,就启动了一个进程。

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。同一进程中的多条线程共享该进程中的全部系统资源。

并行和并发

并行:是指多个处理器或者是多核的处理器同时处理多个不同的任务。是物理上的同时发生。

并发:当谈论并发的时候一定要加个单位时间,也就是说单位时间内并发量是多少。比如单核CPU在同一时间段内同时处理多个任务。是逻辑上的同时发生。如果开两个线程执行,在几乎不可能察觉到的速度不断去切换这两个任务,已达到"同时执行效果",其实并不是的,只是计算机的速度太快,我们无法察觉到而已。

高并发编程的意义、好处和注意事项

多线程可以给程序带来如下好处:

1、充分利用CPU的资源
2、加快响应用户的时间
3、使代码模块化,异步化,简单化

注意事项:

1、线程之间的安全性

在同一个进程里面的多线程是资源共享的。若有多个线程对共享资源同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

2、线程之间的死循环过程

为了解决线程之间的安全性引入了Java的锁机制,而一不小心就会产生Java线程死锁的多线程问题

你可能感兴趣的:(java)