多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行 不同的任务。
2 多线程应用场景例如: 迅雷多线程下载、数据库连接池、分批发送短信等。
3 为什么要使用并发编程提升多核CPU的利用率:
一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲 *** 作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了 CPU的使用效率,如果使用单线程就只能有一个CPU核心被使用。 比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存,生成订单等等这些 *** 作,就可以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求, 而并发编程更能吻合这种业务拆分 。
简单来说就是: 充分利用多核CPU的计算能力; 方便进行业务拆分,提升应用性能
4 并发编程三个必要因素是什么?原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个 *** 作要么全部执行成功要么 全部执行失败。
可见性:一个线程对共享变量的修改,另一个线程能够立刻看到。(synchronized,volatile)
有序性:程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)
5 并发编程有什么缺点?并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏、上下文切换、线程安 全、死锁等问题。
6 并行和并发有什么区别?并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是 同时执行。
并行:单位时间内,多个处理器或多核处理器同时处理多个任务,是真正意义上的“同时进行”。
串行:有n个任务,由一个线程按顺序执行。由于任务、方法都在一个线程执行所以不存在线程不 安全情况,也就不存在临界区的问题。
做一个形象的比喻:
并发 = 俩个人用一台电脑。
并行 = 俩个人分配了俩台电脑。
串行 = 俩个人排队使用一台电脑。
7 多线程的好处?可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程 而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完 成各自的任务。
8 多线程的劣势?线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要 CPU 时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。
9 Java 程序中怎么保证多线程的运行安全?出现线程安全问题的原因一般都是三个原因:
- 线程切换带来的原子性问题 解决办法:使用多线程之间同步synchronized或使用锁(lock)。
- 缓存导致的可见性问题 解决办法:synchronized、volatile、LOCK,可以解决可见性问题
- 编译优化带来的有序性问题 解决办法:Happens-Before 规则可以解决有序性问题
进程:一个在内存中运行的应用程序。 每个正在系统上运行的程序都是一个进程
线程:进程中的一个执行任务(控制单元), 它负责在程序里独立执行。
一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
11 线程和进程区别?根本区别:进程是 *** 作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大 的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己 独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共 同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程与进程之间的地址空间和 资源是相互独立的
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃有 可能导致整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独 立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)