并发编程概述
前言
说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内)。但随着工作内容的变化,一些问题,它的解决方案已经让我避不开并发编程这一块知识点了。为了一劳永逸,此系列与并发编程有关的系列文章诞生,希望对各有有所帮助。
基础术语
同步(synchronization):关于协调线程或进程之间的活动,并确保被多个线程或进程访问的数据一直有效,同步允许线程和进程一致地操作。
并发(concurrency):同时做多间事情,是关于程序的各个方面的合作和串联工作,以实现目标。
进程(Process):一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位,当一个程序开始运行时,它在系统中奖开启一个或多个进程,一个进程又有多个线程组成。
线程(thread):代表程序中的单个执行逻辑流程,是一个独立处理的执行路径,是轻量级的进程。
多线程(multithreading):多个线程来执行程序。并发的一种形式,但不是唯一的方式。
并行处理:把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。多线程的一种。
异步编程:并发的一种形式,采用future模式或回调(callback)机制,以避免产生不必要的线程。
异步编程
异步编程并不一定要用多线程去实现,多线程只是其中一种实现手段。在.Net中,新版funture类型有Task和Task<TResult>。老式异步编程API中采用回调或事件(event)。异步编程的核心理念是异步操作。
异步操作:启动了的操作将会在一段时间后完成。这个操作执行时,不会阻塞原来的线程。启动了这个操作的线程,可以继续执行其他任务。当操作完成时,会通知它的future或调用回调函数,以便让程序指导操作已经结束。
响应式编程:一种声明式的编程模式,程序在该模式中对事件做出响应,区别于异步编程是因为它是基于异步事件(asynchronous evnt)。并发编程的一种形式。
I/O密集与计算密集
I/O密集(I/O-bound):如果一个操作将大部分时间用于等待一个条件的产生,那么它就被成为I/O密集操作。
计算密集(compute-bound):如果一个操作将大部分时间用于执行CPU密集操作,那么它被称为计算密集操作。
并发编程
优秀软件的关键特征就是具有并发性,程序在同一时间做着更多的事情,而不是过去我们看到的一种单请求单响应。智能化、高用户体验的程序已经离不并发编程。
作者:Jonins
出处:http://www.cnblogs.com/jonins/
个人原创,若有错误或补充请联系作者。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。