每日一面——不了解并发编程?回家等通知吧!

菜鸡每日一面系列打卡13

每天一道面试题目 

助力小伙伴轻松拿offer

坚持就是胜利,我们一起努力!

题目描述

谈谈对并发编程的理解。

题目分析

并发编程是面试过程中热点问题,也属于有一定难度的一部分内容,通过对这类问题的考查,面试官不仅能了解求职者的基础水平,也能确知求职者在工作中对于并发编程的实践经验。

题目解答

想要说清楚并发编程,首先要说清楚什么是并发。

并发的含义是什么?一个逻辑流(程序计数器的值序列)的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地执行,多个流并发地执行的一般现象被称为并发。通俗地说就是在同一时间段内,多个任务一起执行。举个例子,A流与B流互相并发,当且仅当A在B开始之后和B结束之前开始,或B在A开始之后和A结束之前开始。

这与并行的概念是不同的,并行是指多个任务同时执行。举个例子,A流与B流同时运行在不同的处理器核或计算机上,则A流与B流为并行流。可以看出,并发的概念是包含并行的概念的。

说清楚了并发,接下来,我们来谈谈为什么需要并发编程。并发编程的出现主要是为了解决资源利用率,公平性,便利性等方面的问题。

  • 资源利用率:例如,在终端等待命令输入的过程中,可以运行另外的程序,这提高了资源利用率。

    

  • 公平性:为了解决某个程序长时间占用计算机资源,而其他程序只能进行等待的问题。

    

  • 便利性:对于程序设计而言,多个程序的组合通信调用实现相应的功能,比单个程序实现全部的功能更加便利。

基于以上原因,并发编程诞生了。那么,并发编程有哪几种实现方式呢?其实,现代操作系统提供了三种基本的并发编程的实现方式:进程,I/O多路复用,线程。

  • 进程:关于进程的基本概念在上一篇文章中已经说过了,不清楚的小伙伴请在文章末尾的相关链接中查阅学习。使用进程的方式实现并发编程,实际上是由操作系统内核对进程进行调度和维护。父进程通过fork子进程的方式,采用共享文件表来实现并发。而不同进程之间有独立的虚拟空间,因此,需要IPC机制进行进程间通信。这也就是我们所说的多进程。

    

  • I/O多路复用程序在一个进程的上下文中显示地调度它们自己的逻辑流,在这种实现方式中,逻辑流被建模成状态机,比较适合用作实现并发事件驱动。I/O多路复用的实现方式与进程的实现方式的明显不同是,I/O多路复用流共享了同一虚拟地址空间,因此,避免了进程上下文切换带来的开销。

    

  • 线程:线程是运行在一个单一进程上下文中的逻辑流,由操作系统内核进行调度。线程结合了进程与I/O多路复用两种实现方式的特点,同一进程的线程间共享了同一虚拟地址空间,并由操作系统内核进行调度。这也就是我们所说的多线程。

值得一题的是,上述三种实现方式根据其特点都有各自的应用场景,并没有严格的好坏之分。

以上便是菜鸡对于并发编程的一些理解,供大家参考。深入理解基本概念,才能写出更好的程序。

相关链接

每日一面——谈谈你对线程和进程的认识

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

你可能感兴趣的:(面试经验)