﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-勇敢的心-文章分类-经典概念</title><link>http://www.blogjava.net/liyong/category/17287.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 22:52:01 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 22:52:01 GMT</pubDate><ttl>60</ttl><item><title>数字数据通信的错误检测与修正</title><link>http://www.blogjava.net/liyong/articles/91510.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Wed, 03 Jan 2007 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/91510.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/91510.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/91510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/91510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/91510.html</trackback:ping><description><![CDATA[在数字数据通信中，由发送器发送的数据信号祯(Frame)在经由网络传到接收器后，由于多种原因可能导致错误位(bit errors)的出现，因此必须由接收器采取一定的措施探测出所有的错误位，并进而采取一定的措施予以修正。
<p>一、错误检测的基本原理(Principle of Error Check)<br />　　发送器向所发送的数据信号祯添加错误检验码(Check Bits)，并取该错误检测码作为该被传输数据信号的函数；接收器根据该函数的定义进行同样的计算，然后将两个结果进行比较：如果结果相同，则认为无错误位；否则认为该数据祯存在有错误位。<br />一般说来，错误检测可能出现三种结果：<br />　　1. 在所传输的数据祯中未探测到，也不存在错误位 <br />　　2. 所传输的数据祯中有一个或多个被探测到的错误位，但不存在未探测到的错误位 <br />　　3. 被传输的数据祯中有一个或多个没有被探测到的错误位。 <br />　　显然我们希望尽可能好地选择该检测函数，使检测结果可靠，即：所有的错误最好都能被检测出来；如检测出现无错结果，则应不再存在任何未被检测出来的错误。<br />　　实际采用的错误检测方法主要有两类：奇偶校验(Parity)和CRC循环冗余校验(Cyclic Redundancy Check)。</p><p>二、奇偶校验(Parity)<br />1.单向奇偶校验<br />　　单向奇偶校验(Row Parity)由于一次只采用单个校验位，因此又称为单个位奇偶校验(Single Bit Parity)。发送器在数据祯每个字符的信号位后添一个奇偶校验位，接收器对该奇偶校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输，由于ASCII码是七位码，因此用第八个位码作为奇偶校验位。<br />单向奇偶校验又分为奇校验(Odd Parity)和偶校验(Even Parity)，发送器通过校验位对所传输信号值的校验方法如下：奇校验保证所传输每个字符的8个位中1的总数为奇数；偶校验则保证每个字符的8个位中1的总数为偶数。<br />　　显然，如果被传输字符的7个信号位中同时有奇数个(例如1、3、5、7)位出现错误，均可以被检测出来；但如果同时有偶数个(例如2、4、6)位出现错误，单向奇偶校验是检查不出来的。<br />　　一般在同步传输方式中常采用奇校验，而在异步传输方式中常采用偶校验。</p><p>2.双向奇偶校验<br />　　为了提高奇偶校验的检错能力，可采用双向奇偶校验(Row and Column Parity)，也可称为双向冗余校验(Vertical and Longitudinal Redundancy Checks)。</p><p>三、CRC循环冗余校验(Cyclic Redundancy Check)<br />1.CRC循环冗余校验的基本原理 <br />　　发送器和接收器约定选择同一个由n+1个位组成的二进制位列P作为校验列，发送器在数据祯的K个位信号后添加n个位(n &lt; K)组成的FCS祯检验列(Frame Check Sequence)，以保证新组成的全部信号列值可以被预定的校验二进制位列P的值对二取模整除；接收器检验所接收到数据信号列值(含有数据信号祯和FCS祯检验列)是否能被校验列P对二取模整除，如果不能，则存在传输错误位。P被称为CRC循环冗余校验列，正确选择P可以提高CRC冗余校验的能力。(注：对二取模的四则运算指参与运算的两个二进制数各位之间凡涉及加减运算时均进行XOR异或运算，即：1 XOR 1=0，0 XOR 0=0，1 XOR 0=1)。可以证明，只要数据祯信号列M和校验列P是确定的，则可以唯一确定FCS祯检验列(也称为CRC冗余检验值)的各个位。<br />　　FCS帧检验列可由下列方法求得：在M后添加n个零后对二取模整除以P所得的余数。<br />　　例如：如要传输的M=7位列为1011101，选定的P校验二进制位列为10101(共有n+1=5位)，对应的FCS帧校验列即为用1011101 0000(共有M+n=7+4=11位)对二取模整除以10101后的余数0111(共有n=4位)。因此，发送方应发送的全部数据列为10111010111。接收方将收到的11位数据对二取模整除以P校验二进制位列10101，如余数非0，则认为有传输错误位。<br />2.CRC循环冗余校验标准多项式P(X)<br />　　为了表示方便，实用时发送器和接收器共同约定选择的校验二进制位列P常被表示为具有二进制系数(1或0)的CRC标准校验多项式P(X)。<br />　　(1)CRC循环冗余校验常用的标准多项式P(X)<br />　　常用的CRC循环冗余校验标准多项式如下： <br />　　CRC(16位) = X^16+X^15+X^2+1<br />　　CRC(CCITT) = X^16+X^12+X^5+1<br />　　CRC(32位) =X^32+X^26+X^23+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1<br />　　以CRC(16位)多项式为例，其对应校验二进制位列为1 1000 0000 0000 0101。<br />　　注意：这儿列出的标准校验多项式P(X)都含有(X+1)的多项式因子；各多项式的系数均为二进制数，所涉及的四则运算仍遵循对二取模的运算规则。<br />　　(2)CRC循环冗余校验标准多项式P(X)的检错能力<br />　　CRC循环冗余校验具有比奇偶校验强得多的检错能力。可以证明：它可以检测出所有的单个位错、几乎所有的双个位错、低于P(X)对应二进制校验列位数的所有连续位错、大于或等于P(X)对应二进制校验列位数的绝大多数连续位错。<br />但是，当传输中发生的错误多项式E(X)能被校验多项式P(X)对二取模整除时，它就不可能被P(X)探测出来，例如当E(X)=P(X)时。</p><p>四、错误修正(Error Correction)<br />　　对数据信号祯传输过程中的位错进行修正的方法主要有两种：<br />　　1. 由发送器提供错误修正码，然后由接收器自己修正错误 <br />　　2. 在接收器发现接收到的错误祯中有位错误时，通知发送器重新发送数据信号祯。 <br />　　前一种方法中的错误修正码需要发送器由被传送数据信号祯计算得到，然后添加到数据祯的后面，其长度几乎等于数据位数，导致效率降低50%，实际采用不多；一般采用后一种较为有效的重发送方法。</p><p><br />数据交换技术(Data Switching Technology)</p><p>　　在数据通信线路中，最简单的形式是在由某种传输介质直接连接的两台设备之间进行通信。但在长距离通信中，从源站发出的数据一般还需要经过网络中一个或多个用作交换设备的中间结点，由相应结点的交换设备把数据从一个结点传送到另一个结点，直至到达目的站。通常我们将交换网络中所有通信的发送方与接收方的主机均简称为站，而将通信交换设备简称为结点。这些结点以不规则的网状结构用传输线路互相连接起来，而每个站点都连接到某个结点上。<br />　　在交换网络中，站点之间需要通过有关结点之间的数据交换才能实现数据通信，基本的交换技术有两类：电路交换与存储转发，存储转发又可以分为报文交换和分组交换，分组交换则可分为面向连接的虚电路传输和无连接的数据报传输。目前，最具有发展前景的是高速分组交换技术。</p><img src ="http://www.blogjava.net/liyong/aggbug/91510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2007-01-03 11:26 <a href="http://www.blogjava.net/liyong/articles/91510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>异步传输与同步传输(Asynchronous &amp; Synchronous Transmission)</title><link>http://www.blogjava.net/liyong/articles/91507.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Wed, 03 Jan 2007 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/91507.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/91507.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/91507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/91507.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/91507.html</trackback:ping><description><![CDATA[
		<p>四、异步传输与同步传输(Asynchronous &amp; Synchronous Transmission)<br />1.同步问题的重要性<br />　　在数字通信中，同步(Synchronous)是十分重要的。当发送器通过传输介质向接收器传输数据信息时，如每次发出一个字符(或一个数据帧)的数据信号，接收器必须识别出该字符(或该帧)数据信号的开始位和结束位，以便在适当的时刻正确地读取该字符(或该帧)数据信号的每一位信息，这就是接收器与发送器之间的基本同步问题。<br />　　当以数据帧传输数据信号时，为了保证传输信号的完整性和准确性，除了要求接收器应能识别每个字符(或数据帧)对应信号的起止，以保证在正确的时刻开始和结束读取信号，也即保持传输信号的完整性外；还要求使其时钟与发送器保持相同的频率，以保证单位时间读取的信号单元数相同，也即保证传输信号的准确性。<br />　　因此当以数据帧传输数据信号时，要求发送器应对所发送的信号采取以下两个措施：①在每帧数据对应信号的前面和后面分别添加有别于数据信号的开始信号和停止信号；②在每帧数据信号的前面添加时钟同步信号，以控制接收器的时钟同步。</p>
		<p>2.异步传输与同步传输<br />　　异步传输与同步传输均存在上述基本同步问题：一般采用字符同步或帧同步信号来识别传输字符信号或数据帧信号的开始和结束。两者之间的主要区别在于发送器或接收器之一是否向对方发送时钟同步信号。<br />异步传输(Asynchronous Transmission)以字符为单位传输数据，采用位形式的字符同步信号，发送器和接收器具有相互独立的时钟(频率相差不能太多)，并且两者中任一方都不向对方提供时钟同步信号。异步传输的发送器与接收器双方在数据可以传送之前不需要协调：发送器可以在任何时刻发送数据，而接收器必须随时都处于准备接收数据的状态。计算机主机与输入、输出设备之间一般采用异步传输方式，如键盘、典型的RS-232串口(用于计算机与调制解调器或ASCII码终端设备之间)：发送方可以在任何时刻发送一个字符(由一个开始位引导，然后连续发完该字符的各位，后跟一个位长以上的哑位)。<br />　　同步传输(Synchronous Transmission)以数据帧为单位传输数据，可采用字符形式或位组合形式的帧同步信号(后者的传输效率和可靠性高)，由发送器或接收器提供专用于同步的时钟信号。在短距离的高速传输中，该时钟信号可由专门的时钟线路传输；计算机网络采用同步传输方式时，常将时钟同步信号植入数据信号帧中，以实现接收器与发送器的时钟同步。</p>
<img src ="http://www.blogjava.net/liyong/aggbug/91507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2007-01-03 11:22 <a href="http://www.blogjava.net/liyong/articles/91507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通信知识-----数据交换技术(Data Switching Technology)</title><link>http://www.blogjava.net/liyong/articles/91497.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Wed, 03 Jan 2007 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/91497.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/91497.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/91497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/91497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/91497.html</trackback:ping><description><![CDATA[数据交换技术(Data Switching Technology)
<p>　　在数据通信线路中，最简单的形式是在由某种传输介质直接连接的两台设备之间进行通信。但在长距离通信中，从源站发出的数据一般还需要经过网络中一个或多个用作交换设备的中间结点，由相应结点的交换设备把数据从一个结点传送到另一个结点，直至到达目的站。通常我们将交换网络中所有通信的发送方与接收方的主机均简称为站，而将通信交换设备简称为结点。这些结点以不规则的网状结构用传输线路互相连接起来，而每个站点都连接到某个结点上。<br />　　在交换网络中，站点之间需要通过有关结点之间的数据交换才能实现数据通信，基本的交换技术有两类：电路交换与存储转发，存储转发又可以分为报文交换和分组交换，分组交换则可分为面向连接的虚电路传输和无连接的数据报传输。目前，最具有发展前景的是高速分组交换技术。 </p><p>一、电路交换(Circuit Switching)<br />　　电路交换(Circuit Switching)是在两个站点之间通过通信子网的结点建立一条专用的通信线路，这些结点通常是一台采用机电与电子技术的交换设备(例如程控交换机)。也就是说，在两个通信站点之间需要建立实际的物理连接，其典型实例是两台电话之间通过公共电话网络的互连实现通话。 <br />　　电路交换实现数据通信需经过下列三个步骤：首先是建立连接，即建立端到端(站点到站点)的线路连接；其次是数据传送，所传输数据可以是数字数据(如远程终端到计算机)，也可以是模拟数据(如声音)；最后是拆除连接，通常在数据传送完毕后由两个站点之一终止连接。 电路交换的优点是实时性好，但将电话采用的电路交换技术用于传送计算机或远程终端的数据时，会出现下列问题：①用于建立连接的呼叫时间大大长于数据传送时间(这是因为在建立连接的过程中，会涉及一系列硬件开关动作，时间延迟较长，如某段线路被其他站点占用或物理断路，将导致连接失败，并需重新呼叫)；②通信带宽不能充分利用，效率低(这是因为两个站点之间一旦建立起连接，就独自占用实际连通的通信线路，而计算机通信时真正用来传送数据的时间一般不到10%，甚至可低到1%)；③由于不同计算机和远程终端的传输速率不同，因此必须采取一些措施才能实现通信，如不直接连通终端和计算机，而设置数据缓存器等。 </p><p>二、报文交换(Message Switching)<br />　　报文交换(Message Switching)是通过通信子网上的结点采用存储转发的方式来传输数据，它不需要在两个站点之间建立一条专用的通信线路。报文交换中传输数据的逻辑单元称为报文，其长度一般不受限制，可随数据不同而改变。一般它将接收报文站点的地址附加于报文一起发出，每个中间结点接收报文后暂存报文，然后根据其中的地址选择线路再把它传到下一个结点，直至到达目的站点。 <br />　　实现报文交换的结点通常是一台计算机，它具有足够的存储容量来缓存所接收的报文。一个报文在每个结点的延迟时间等于接收报文的全部位码所需时间、等待时间，以及传到下一个结点的排队延迟时间之和。 <br />报文交换的主要优点是线路利用率较高，多个报文可以分时共享结点间的同一条通道；此外，该系统很容易把一个报文送到多个目的站点。报文交换的主要缺点是报文传输延迟较长(特别是在发生传输错误后)，而且随报文长度变化，因而不能满足实时或交互式通信的要求，不能用于声音连接，也不适于远程终端与计算机之间的交互通信。</p><p>三、分组交换(Packet Switching)<br />　　分组交换(Packet Switching)的基本思想包括：数据分组、路由选择与存储转发。它类似于报文交换，但它限制每次所传输数据单位的长度(典型的最大长度为数千位)，对于超过规定长度的数据必须分成若干个等长的小单位，称为分组(Packets)。从通信站点的角度来看，每次只能发送其中一个分组。 <br />　　各站点将要传送的大块数据信号分成若干等长而较小的数据分组，然后顺序发送；通信子网中的各个结点按照一定的算法建立路由表(各目标站点各自对应的下一个应发往的结点)，同时负责将收到的分组存储于缓存区中(而不使用速度较慢的外存储器)，再根据路由表确定各分组下一步应发向哪个结点，在线路空闲时再转发；依次类推，直到各分组传到目标站点。由于分组交换在各个通信路段上传送的分组不大，故只需很短的传输时间(通常仅为ms数量级)，传输延迟小，故非常适合远程终端与计算机之间的交互通信，也有利于多对时分复用通信线路；此外由于采取了错误检测措施，故可保证非常高的可靠性；而在线路误码率一定的情况下，小的分组还可减少重新传输出错分组的开销；与电路交换相比，分组交换带给用户的优点则是费用低。 根据通信子网的不同内部机制，分组交换子网又可分为面向连接(Connect-Oriented)和无连接(Connectless)两类。前者要求建立称为虚电路(Virtual Circuit)的连接，一对主机之间一旦建立虚电路，分组即可按虚电路号传输，而不必给出每个分组的显式目标站点地址，在传输过程中也无须为之单独寻址，虚电路在关闭连接时撤销。后者不建立连接，数据报(Datagram，即分组)带有目标站点地址，在传输过程中需要为之单独寻址。 <br />　　分组交换的灵活性高，可以根据需要实现面向连接或无连接的通信，并能充分利用通信线路，因此现有的公共数据交换网都采用分组交换技术。LAN局域网也采用分组交换技术，但在局域网中，从源站到目的站只有一条单一的通信线路，因此，不需要公用数据网中的路由选择和交换功能。 四、高速分组交换技术(High Speed Packet Switching Technology)<br />　　由于网络的应用越来越广泛，人们对通信线路带宽的需求越来越高，现有的交换技术，已经不能满足日益增长的网络应用的要求，如交互式的会话对实时性要求很高，延迟要很小；高清晰度电视图像及多媒体实时数据的传送都要求高速宽带的通信网。<br />1.帧中继<br />　　帧中继(Frame Relay)是目前开始流行的一种高速分组技术。典型的帧中继通信系统以帧中继交换机作为结点组成高速帧中继网，再将各个计算机网络通过路由器与帧中继网络中的某一结点相连；与一般分组交换在每个结点均要对组成分组的各个数据帧进行检错等处理不同的是：帧中继交换结点在接收到一个帧时就转发该帧，并大大减少(并不完全取消)接收该帧过程中的检错步骤，从而将结点对帧的处理时间缩短一个数量级，因此称为高速分组交换。当某结点发现错误则立即中止该帧的传输，并由源站申请重发该帧。显然，只有当帧中继网络中的错误率非常低时，帧中继技术才是可行的。 <br />帧中继的帧长是可变的，可按需要分配带宽，帧中继网络的传输速率可达64Kbps~45Mbps，适用于局域网、城域网和广域网。<br />2.ATM异步传输模式<br />　　最有发展前途的高速分组交换技术是ATM异步传输模式(Asynchronous Transfer Mode)，它是建立在电路交换与分组交换基础上的一种新的交换技术，并由基于光纤网络的B-ISDN宽带综合业务数字网所采用：用户主机所在网络通过ATM交换结点再与光纤数字网络相连。<br />ATM异步传输模式的主要特点如下：<br />　　1). 模式中的分组称为信元(Cell)，其长度是固定的，由5个字节首部和48个字节的信息字组成，因此在各结点可采用硬件对信元进行处理，而缩短信元处理时间 <br />　　2). 交换设备可按网络最大速度设置，而不同类型的服务可复用在一起，各通信信道对应信元根据业务量的大小按先到先服务的原则占用各分时段，速率高的信源占用较多时段，因而可支持各种业务的不同速率 <br />　　3). 保留电路交换以满足传输从语音到高清晰度电视图像等各种实时性很强的业务需要 <br />利用光纤通信误码率低的优点将差错控制由数据链路层改到高层，而提高信元在网络中的传输速率。<br /><br /> 转自<a href="http://www.hansun.com.cn/txzs/">http://www.hansun.com.cn/txzs/</a><br /></p><img src ="http://www.blogjava.net/liyong/aggbug/91497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2007-01-03 10:58 <a href="http://www.blogjava.net/liyong/articles/91497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>何谓门户网站</title><link>http://www.blogjava.net/liyong/articles/84914.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Fri, 01 Dec 2006 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/84914.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/84914.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/84914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/84914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/84914.html</trackback:ping><description><![CDATA[
		<strong>门户网站 <br /><br /></strong>门户（portal）。原意是指正门、入口，现多用于互联网的门户网站和企业应用系统的门户系统。 <br /><br />①派别、门派。如"门户之见"。《新唐书·书云起传》："今朝廷多山东人，自作门户"。②防守架势。如"作个门户"。"亮开门户"。明俞大献《剑经》："手动时，即下定四步，门户方密。"《水治传》第九回："洪教头……使个旗鼓，吐个门户，唤作把火烧天势。"③拳家较艺所惯称的人体攻击部位。一般指胸、肋、裆部，有大门、小门、二门之分。清张孔昭《拳经拳法备要·周身秘诀十二项》："下盘之门户在膝。"<br /><br />广义注解 <br /><br />这里是一个应用框架，它将各种应用系统、数据资源和互联网资源集成到一个信息管理平台之上，并以统一的用户界面提供给用户，使企业可以快速地建立企业对客户、企业对内部员工和企业对企业的信息通道, 使企业能够释放存储在企业内部和外部的各种信息。 <br /><br />狭义注解 <br /><br />所谓门户网站，是指通向某类综合性互联网信息资源并提供有关信息服务的应用系统。门户网站最初提供搜索发动机和网络接入服务，后来由于市场竞争日益激烈，门户网站不得不快速地拓展各种新的业务类型，希望通过门类众多的业务来吸引和留驻互联网用户，以至于目前门户网站的业务包罗万象，成为网络世界的“百货商场”或“网络超市”。从现在的情况来看，门户网站主要提供新闻、搜索发动机、网络接入、聊天室、电子公告牌、免费邮箱、影音资讯、电子商务、网络社区、网络游戏、免费网页空间，等等。在我国，典型的门户网站有新浪网、网易和搜狐网等。<img src ="http://www.blogjava.net/liyong/aggbug/84914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2006-12-01 17:57 <a href="http://www.blogjava.net/liyong/articles/84914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA中的30个概念</title><link>http://www.blogjava.net/liyong/articles/81373.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Wed, 15 Nov 2006 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/81373.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/81373.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/81373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/81373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/81373.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.OOP		中唯一关系的是对象的接口是什么		,		就像计算机的销售商她不管电源内部结构是怎样的		,		他只关系能否给你提供电就行了		,		也就是只要知道		can or not		而不是		how and why.		所有的程序是由一定的属性和行为对象组成的		,		不同的对象的访问通过函数调用来完成		,		对象间所有的交流都是...&nbsp;&nbsp;<a href='http://www.blogjava.net/liyong/articles/81373.html'>阅读全文</a><img src ="http://www.blogjava.net/liyong/aggbug/81373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2006-11-15 21:19 <a href="http://www.blogjava.net/liyong/articles/81373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同步、异步、阻塞和非阻塞的概念</title><link>http://www.blogjava.net/liyong/articles/81371.html</link><dc:creator>Timothy</dc:creator><author>Timothy</author><pubDate>Wed, 15 Nov 2006 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/liyong/articles/81371.html</guid><wfw:comment>http://www.blogjava.net/liyong/comments/81371.html</wfw:comment><comments>http://www.blogjava.net/liyong/articles/81371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liyong/comments/commentRss/81371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liyong/services/trackbacks/81371.html</trackback:ping><description><![CDATA[在进行网络编程时，我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。<br /><h2>同步</h2><br /><p>  所谓同步，就是在发出一个功能调用时，在没有得到结果之前，该调用就不返回。按照这个定义，其实绝大多数函数都是同步调用（例如sin, isdigit等）。但是一般而言，我们在说同步、异步的时候，特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口，在对方处理完消息之前，这个函数不返回。当对方处理完毕以后，该函数才把消息处理函数所返回的 LRESULT值返回给调用者。</p><br /><h2>异步</h2><br /><p>   异步的概念和同步相对。当一个异步过程调用发出后，调用者不能立刻得到结果。实际处理这个调用的部件在完成后，通过状态、通知和回调来通知调用者。以CAsycSocket类为例（注意，CSocket从CAsyncSocket派生，但是起功能已经由异步转化为同步），当一个客户端通过调用 Connect函数发出一个连接请求后，调用者线程立刻可以朝下运行。当连接真正建立起来以后，socket底层会发送一个消息通知该对象。<br />这里提到执行部件和调用者通过三种途径返回结果：状态、通知和回调。可以使用哪一种依赖于执行部件的实现，除非执行部件提供多种选择，否则不受调用者控制。如果执行部件用状态来通知，那么调用者就需要每隔一定时间检查一次，效率就很低（有些初学多线程编程的人，总喜欢用一个循环去检查某个变量的值，这其实是一种很严重的错误）。如果是使用通知的方式，效率则很高，因为执行部件几乎不需要做额外的操作。至于回调函数，其实和通知没太多区别。</p><br /><h2>阻塞</h2><br /><p>   阻塞调用是指调用结果返回之前，当前线程会被挂起。函数只有在得到结果之后才会返回。<br />有人也许会把阻塞调用和同步调用等同起来，实际上他是不同的。对于同步调用来说，很多时候当前线程还是激活的，只是从逻辑上当前函数没有返回而已。例如，我们在CSocket中调用Receive函数，如果缓冲区中没有数据，这个函数就会一直等待，直到有数据才返回。而此时，当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中，除非你在特殊的界面操作函数中调用，其实主界面还是应该可以刷新。<br />socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候，如果没有数据的情况下调用该函数，则当前线程就会被挂起，直到有数据为止。</p><br /><h2>非阻塞</h2><br /><p>   非阻塞和阻塞的概念相对应，指在不能立刻得到结果之前，该函数不会阻塞当前线程，而会立刻返回。</p><br /><h2>对象的阻塞模式和阻塞函数调用</h2><br /><p>   对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性，但是并不是一一对应的。阻塞对象上可以有非阻塞的调用方式，我们可以通过一定的API去轮询状态，在适当的时候调用阻塞函数，就可以避免阻塞。而对于非阻塞对象，调用特殊的函数也可以进入阻塞调用。函数select就是这样的一个例子。</p><img src ="http://www.blogjava.net/liyong/aggbug/81371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liyong/" target="_blank">Timothy</a> 2006-11-15 21:16 <a href="http://www.blogjava.net/liyong/articles/81371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>