導航:首頁 > 編程語言 > phpsocket非同步

phpsocket非同步

發布時間:2022-07-13 04:53:30

1. Socket同步和非同步的區別

socket的同步和非同步,主要是指處理服務端處理socket的模式,接收消息和處理消息的同步和非同步。

同步的socket,服務端在接收到一個socket請求之後,必須處理完並返回給客戶端之後,才處理下一個socket請求。
非同步的socket,服務端在收到一個socket請求之後,將該socket請求交給其他線程處理,然後繼續接收下一個socket請求。並不需要等上一個socket請求處理完才接收下一個。
一般現在都是非同步socket,同步socket只用於telnet等單實例的服務端,很少見了。

2. 如何使用fsockopen函數實現非同步執行php

Web伺服器執行一個PHP腳本,有時耗時很長才能返回執行結果,後面的腳本需要等待很長一段時間才能繼續執行。如果想實現只簡單觸發耗時腳本的執行而不等待執行結果就直接執行下一步操作,可以通過fscokopen函數來實現。
PHP支持socket編程,fscokopen函數返回一個到遠程主機連接的句柄,可以像使用fopen返回的句柄一樣,對它進行fwrite、fgets、fread等操作。使用fsockopen連接到本地伺服器,觸發腳本執行,然後立即返回,不等待腳本執行完成,即可實現非同步執行PHP的效果。
示例代碼如下:
functiontriggerRequest($url,$post_data=array(),$cookie=array()){
$method="GET";//通過POST或者GET傳遞一些參數給要觸發的腳本
$url_array=parse_url($url);//獲取URL信息
$port=isset($url_array['port'])?$url_array['port']:80;
$fp=fsockopen($url_array['host'],$port,$errno,$errstr,30);
if(!$fp){
returnFALSE;
}
$getPath=$url_array['path']."?".$url_array['query'];
if(!empty($post_data)){
$method="POST";
}
$header=$method."".$getPath;
$header.="HTTP/1.1\r\n";
$header.="Host:".$url_array['host']."\r\n";//HTTP1.1Host域不能省略
/*以下頭信息域可以省略
$header.="User-Agent:Mozilla/5.0(Windows;U;
WindowsNT5.1;en-US;rv:1.8.1.13)Gecko/20080311Firefox/2.0.0.13\r\n";
$header.="Accept:text/xml,application/xml,application/
xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5\r\n";
$header.="Accept-Language:en-us,en;q=0.5";
$header.="Accept-Encoding:gzip,deflate\r\n";
*/
$header.="Connection:Close\r\n";
if(!empty($cookie)){
$_cookie=strval(NULL);
foreach($cookieas$k=>$v){
$_cookie.=$k."=".$v.";";
}
$cookie_str="Cookie:".base64_encode($_cookie)."\r\n";//傳遞Cookie
$header.=$cookie_str;
}
if(!empty($post_data)){
$_post=strval(NULL);
foreach($post_dataas$k=>$v){
$_post.=$k."=".$v."&";
}
$post_str="Content-Type:application/x-www-form-urlencoded\r\n";
$post_str.="Content-Length:".strlen($_post)."\r\n";//POST數據的長度
$post_str.=$_post."\r\n\r\n";//傳遞POST數據
$header.=$post_str;
}
fwrite($fp,$header);
//echofread($fp,1024);//伺服器返回
fclose($fp);
returntrue;
}
這樣就可以通過fsockopen()函數來觸發一個PHP腳本的執行,然後函數就會返回。接著執行下一步操作了。
現在存在一個問題:當客戶端斷開連接後,也就是triggerRequest發送請求後,立即關閉了連接,那麼可能會引起伺服器端正在執行的腳本退出。
在PHP內部,系統維護著連接狀態,其狀態有三種可能的情況:
*0–NORMAL(正常)
*1–ABORTED(異常退出)
*2–TIMEOUT(超時)
當PHP腳本正常地運行NORMAL狀態時,連接為有效。當客戶端中斷連接時,ABORTED狀態的標記將會被打開。遠程客戶端連接的中斷通常是由用戶點擊STOP按鈕導致的。當連接時間超過PHP的時限(參閱set_time_limit()函數)時,TIMEOUT狀態的標記將被打開。
可以決定腳本是否需要在客戶端中斷連接時退出。有時候讓腳本完整地運行會帶來很多方便,即使沒有遠程瀏覽器接受腳本的輸出。默認的情況是當遠程客戶端連接中斷時腳本將會退出。該處理過程可由php.ini的ignore_user_abort或由Apache.conf設置中對應的"php_valueignore_user_abort"以及ignore_user_abort()函數來控制。如果沒有告訴PHP忽略用戶的中斷,腳本將會被中斷,除非通過register_shutdown_function()設置了關閉觸發函數。通過該關閉觸發函數,當遠程用戶點擊STOP按鈕後,腳本再次嘗試輸出數據時,PHP將會檢測到連接已被中斷,並調用關閉觸發函數。
腳本也有可能被內置的腳本計時器中斷。默認的超時限制為30秒。這個值可以通過設置php.ini的max_execution_time或Apache.conf設置中對應的"php_valuemax_execution_time"參數或者set_time_limit()函數來更改。當計數器超時的時候,腳本將會類似於以上連接中斷的情況退出,先前被注冊過的關閉觸發函數也將在這時被執行。在該關閉觸發函數中,可以通過調用connection_status()函數來檢查超時是否導致關閉觸發函數被調用。如果超時導致了關閉觸發函數的調用,該函數將返回2。
需要注意的一點是ABORTED和TIMEOUT狀態可以同時有效。這在告訴PHP忽略用戶的退出操作時是可能的。PHP將仍然注意用戶已經中斷了連接但腳本仍然在運行的情況。如果到了運行的時間限制,腳本將被退出,設置過的關閉觸發函數也將被執行。在這時會發現函數connection_status()返回3。
所以還在要觸發的腳本中指明:
ignore_user_abort(TRUE);//如果客戶端斷開連接,不會引起腳本abort
set_time_limit(0);//取消腳本執行延時上限
或使用:
register_shutdown_function(callbackfuction[,parameters]);//注冊腳本退出時執行的函數

3. socket網路編程中的同步,非同步,阻塞式,非阻塞式,有何聯系與區別

同步即阻塞式。
非同步即非阻塞式。
同步時,網路處理(讀寫等)沒有結束,操作不返回。
非同步時,只告訴網路去做某個處理,不需要等待處理結束;稍後網路處理結束後,會通知調用者處理結果。在網路處理結束前,調用者可以去做其他工作(比如解析上次收到的數據),也可以啥工作也不做就等待網路處理結果(類似阻塞式方式)。

4. socket分不分同步和非同步

據我所知,windows的socket是從UNIX的伯利克socket而來的,windows對其進行了擴展,成了Winsock。
windows對其擴展主要是增加了非同步的消息處理機制。
由此可以反推,只有winsock才有非同步機制。

至於你程序中要用同步還是非同步方式,完全看你設計需要,一般情況下,非同步方式設計起來比較容易。而同步方式需要用多線程(你不用的話程序就卡在那,呵呵),需要考慮多線程的數據同步問題,比較麻煩。。 而且如果沒什麼經驗的話,可能會遺留一些不可預見的錯誤。。呵呵。。

5. socket實現過程,具體用的方法;怎麼實現非同步socket

基於C#的socket編程的TCP非同步實現
一、摘要
本篇博文闡述基於TCP通信協議的非同步實現。

二、實驗平台
Visual Studio 2010

三、非同步通信實現原理及常用方法
3.1 建立連接
在同步模式中,在伺服器上使用Accept方法接入連接請求,而在客戶端則使用Connect方法來連接伺服器。相對地,在非同步模式下,伺服器可以使用BeginAccept方法和EndAccept方法來完成連接到客戶端的任務,在客戶端則通過BeginConnect方法和EndConnect方法來實現與伺服器的連接。

BeginAccept在非同步方式下傳入的連接嘗試,它允許其他動作而不必等待連接建立才繼續執行後面程序。在調用BeginAccept之前,必須使用Listen方法來偵聽是否有連接請求,BeginAccept的函數原型為:

BeginAccept(AsyncCallback AsyncCallback, Ojbect state)
參數:

AsyncCallBack:代表回調函數

state:表示狀態信息,必須保證state中包含socket的句柄

使用BeginAccept的基本流程是:
(1)創建本地終節點,並新建套接字與本地終節點進行綁定;
(2)在埠上偵聽是否有新的連接請求;
(3)請求開始接入新的連接,傳入Socket的實例或者StateOjbect的實例。

參考代碼:

復制代碼
//定義IP地址
IPAddress local = IPAddress.Parse("127.0,0,1");
IPEndPoint iep = new IPEndPoint(local,13000);
//創建伺服器的socket對象
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server.Bind(iep);
server.Listen(20);
server.BeginAccecpt(new AsyncCallback(Accept),server);
復制代碼
當BeginAccept()方法調用結束後,一旦新的連接發生,將調用回調函數,而該回調函數必須包括用來結束接入連接操作的EndAccept()方法。

該方法參數列表為 Socket EndAccept(IAsyncResult iar)

下面為回調函數的實例:

復制代碼
void Accept(IAsyncResult iar)
{
//還原傳入的原始套接字
Socket MyServer = (Socket)iar.AsyncState;
//在原始套接字上調用EndAccept方法,返回新的套接字
Socket service = MyServer.EndAccept(iar);
}
復制代碼
至此,伺服器端已經准備好了。客戶端應通過BeginConnect方法和EndConnect來遠程連接主機。在調用BeginConnect方法時必須注冊相應的回調函數並且至少傳遞一個Socket的實例給state參數,以保證EndConnect方法中能使用原始的套接字。下面是一段是BeginConnect的調用:

Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)
IPAddress ip=IPAddress.Parse("127.0.0.1");
IPEndPoint iep=new IPEndPoint(ip,13000);
socket.BeginConnect(iep, new AsyncCallback(Connect),socket);
EndConnect是一種阻塞方法,用於完成BeginConnect方法的非同步連接誒遠程主機的請求。在注冊了回調函數後必須接收BeginConnect方法返回的IASynccReuslt作為參數。下面為代碼演示:

復制代碼
void Connect(IAsyncResult iar)
{
Socket client=(Socket)iar.AsyncState;
try
{
client.EndConnect(iar);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{

}
}
復制代碼

除了採用上述方法建立連接之後,也可以採用TcpListener類裡面的方法進行連接建立。下面是伺服器端對關於TcpListener類使用BeginAccetpTcpClient方法處理一個傳入的連接嘗試。以下是使用BeginAccetpTcpClient方法和EndAccetpTcpClient方法的代碼:

復制代碼
public static void DoBeginAccept(TcpListener listner)
{
//開始從客戶端監聽連接
Console.WriteLine("Waitting for a connection");
//接收連接
//開始准備接入新的連接,一旦有新連接嘗試則調用回調函數DoAcceptTcpCliet
listner.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpCliet), listner);
}

//處理客戶端的連接
public static void DoAcceptTcpCliet(IAsyncResult iar)
{
//還原原始的TcpListner對象
TcpListener listener = (TcpListener)iar.AsyncState;

//完成連接的動作,並返回新的TcpClient
TcpClient client = listener.EndAcceptTcpClient(iar);
Console.WriteLine("連接成功");
}
復制代碼
代碼的處理邏輯為:
(1)調用BeginAccetpTcpClient方法開開始連接新的連接,當連接視圖發生時,回調函數被調用以完成連接操作;
(2)上面DoAcceptTcpCliet方法通過AsyncState屬性獲得由BeginAcceptTcpClient傳入的listner實例;
(3)在得到listener對象後,用它調用EndAcceptTcpClient方法,該方法返回新的包含客戶端信息的TcpClient。

BeginConnect方法和EndConnect方法可用於客戶端嘗試建立與服務端的連接,這里和第一種方法並無區別。下面看實例:

復制代碼
public void doBeginConnect(IAsyncResult iar)
{
Socket client=(Socket)iar.AsyncState;
//開始與遠程主機進行連接
client.BeginConnect(serverIP[0],13000,requestCallBack,client);
Console.WriteLine("開始與伺服器進行連接");
}
private void requestCallBack(IAsyncResult iar)
{
try
{
//還原原始的TcpClient對象
TcpClient client=(TcpClient)iar.AsyncState;
//
client.EndConnect(iar);
Console.WriteLine("與伺服器{0}連接成功",client.Client.RemoteEndPoint);
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{

}
}
復制代碼
以上是建立連接的兩種方法。可根據需要選擇使用。

3.2 發送與接受數據
在建立了套接字的連接後,就可以伺服器端和客戶端之間進行數據通信了。非同步套接字用BeginSend和EndSend方法來負責數據的發送。注意在調用BeginSend方法前要確保雙方都已經建立連接,否則會出異常。下面演示代碼:

復制代碼
private static void Send(Socket handler, String data)
{
// Convert the string data to byte data using ASCII encoding.
byte[] byteData = Encoding.ASCII.GetBytes(data);
// Begin sending the data to the remote device.
handler.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), handler);
}
private static void SendCallback(IAsyncResult ar)
{
try
{
// Retrieve the socket from the state object.
Socket handler = (Socket)ar.AsyncState;
// Complete sending the data to the remote device.
int bytesSent = handler.EndSend(ar);
Console.WriteLine("Sent {0} bytes to client.", bytesSent);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
復制代碼
接收數據是通過BeginReceive和EndReceive方法:

復制代碼
private static void Receive(Socket client)
{
try
{
// Create the state object.
StateObject state = new StateObject();
state.workSocket = client;
// Begin receiving the data from the remote device.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
private static void ReceiveCallback(IAsyncResult ar)
{
try
{
// Retrieve the state object and the client socket
// from the asynchronous state object.
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
// Read data from the remote device.
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
// There might be more data, so store the data received so far.

state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
// Get the rest of the data.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
else
{
// All the data has arrived; put it in response.
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
// Signal that all bytes have been received.
receiveDone.Set();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
復制代碼
上述代碼的處理邏輯為:

(1)首先處理連接的回調函數里得到的通訊套接字client,接著開始接收數據;
(2)當數據發送到緩沖區中,BeginReceive方法試圖從buffer數組中讀取長度為buffer.length的數據塊,並返回接收到的數據量bytesRead。最後接收並列印數據。除了上述方法外,還可以使用基於NetworkStream相關的非同步發送和接收方法,下面是基於NetworkStream相關的非同步發送和接收方法的使用介紹。
NetworkStream使用BeginRead和EndRead方法進行讀操作,使用BeginWreite和EndWrete方法進行寫操作,下面看實例:

復制代碼
static void DataHandle(TcpClient client)
{
TcpClient tcpClient = client;
//使用TcpClient的GetStream方法獲取網路流
NetworkStream ns = tcpClient.GetStream();
//檢查網路流是否可讀
if(ns.CanRead)
{
//定義緩沖區
byte[] read = new byte[1024];
ns.BeginRead(read,0,read.Length,new AsyncCallback(myReadCallBack),ns);
}
else
{
Console.WriteLine("無法從網路中讀取流數據");
}
}

public static void myReadCallBack(IAsyncResult iar)
{
NetworkStream ns = (NetworkStream)iar.AsyncState;
byte[] read = new byte[1024];
String data = "";
int recv;

recv = ns.EndRead(iar);
data = String.Concat(data, Encoding.ASCII.GetString(read, 0, recv));

//接收到的消息長度可能大於緩沖區總大小,反復循環直到讀完為止
while (ns.DataAvailable)
{
ns.BeginRead(read, 0, read.Length, new AsyncCallback(myReadCallBack), ns);
}
//列印
Console.WriteLine("您收到的信息是" + data);
}
復制代碼
3.3 程序阻塞與非同步中的同步問題
.Net里提供了EventWaitHandle類來表示一個線程的同步事件。EventWaitHandle即事件等待句柄,他允許線程通過操作系統互發信號和等待彼此的信號來達到線程同步的目的。這個類有2個子類,分別為AutoRestEevnt(自動重置)和ManualRestEvent(手動重置)。下面是線程同步的幾個方法:
(1)Rset方法:將事件狀態設為非終止狀態,導致線程阻塞。這里的線程阻塞是指允許其他需要等待的線程進行阻塞即讓含WaitOne()方法的線程阻塞;
(2)Set方法:將事件狀態設為終止狀態,允許一個或多個等待線程繼續。該方法發送一個信號給操作系統,讓處於等待的某個線程從阻塞狀態轉換為繼續運行,即WaitOne方法的線程不在阻塞;
(3)WaitOne方法:阻塞當前線程,直到當前的等待句柄收到信號。此方法將一直使本線程處於阻塞狀態直到收到信號為止,即當其他非阻塞進程調用set方法時可以繼續執行。

復制代碼
public static void StartListening()
{
// Data buffer for incoming data.
byte[] bytes = new Byte[1024];
// Establish the local endpoint for the socket.
// The DNS name of the computer
// running the listener is "host.contoso.com".
//IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
//IPAddress ipAddress = ipHostInfo.AddressList[0];
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local
//endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(100);
while (true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...");
listener.BeginAccept(new AsyncCallback(AcceptCallback),listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("\nPress ENTER to continue...");
Console.Read();
}
復制代碼

上述代碼的邏輯為:

(1)試用了ManualRestEvent對象創建一個等待句柄,在調用BeginAccept方法前使用Rest方法允許其他線程阻塞;
(2)為了防止在連接完成之前對套接字進行讀寫操作,務必要在BeginAccept方法後調用WaitOne來讓線程進入阻塞狀態。

當有連接接入後系統會自動調用會調用回調函數,所以當代碼執行到回調函數時說明連接已經成功,並在函數的第一句就調用Set方法讓處於等待的線程可以繼續執行

6. 非同步socket是什麼意思

非同步,執行完函數或方法後,不必阻塞性地等待返回值或消息,只需要向系統委託一個非同步過程,那麼當系統接收到返回值或消息時,系統會自動觸發委託的非同步過程,從而完成一個完整的流程。
由於socket函數在accept、send的時候,由於網路等原因,不能很快的完成,因此會發生進程阻塞(直到socket函數執行完成,下面的函數才會執行),因此,往往是新建一個進程,讓他執行socket過程,主線程管理用戶界面,不會出現UI假死的情況。因此,所謂非同步的socket,就是在另外一個進程中實現的。

7. socket的同步與非同步之間的效率差距是有多大

socket的同步與非同步之間的效率差距很大。socket的意思是中央處理器的插座。位於主板上。
主板是安裝在主機中最大的一塊印刷電路板,是一台電腦的核心部分,它是中央處理器、內存、各種控制晶元、輸入輸出控制和各種擴展槽卡的基本依託。主板性能直接影響主板上其它部件性能的發揮,不同的中央處理器應該配備相應的主板才能正常工作。ß主板上面有許多大規模集成電路、超大規模集成電路器件和電子線路、其中包括晶元組、中央處理器插座、內存插槽、匯流排擴展槽、外設埠和BIOS晶元。許多主板帶有電源管理功能,在規定時間內,無鍵盤、滑鼠和磁碟操作時,系統自動切斷磁碟驅動器和顯示器的電源,使屏幕變黑,系統只給中央處理器供電。匯流排是用一串插接器組成一組導線,所有的插接器與每條線相連。當一塊匯流排適配卡插入到某個擴展槽中,就與匯流排的公共導線接上了,它能接收到微機內部傳來的公共信號和信息。ISA擴展槽的顏色一般是黑的,是主板中最長的擴展槽,是早期主板必備的插槽之一。PCI擴展槽長度短,顏色一般為白色,位寬一般為32位或64位。目前只有顯示卡才有AGP匯流排。
並行通信埠,即LPT1,俗稱列印口,因為它常接列印機,它是同時傳送八路信號,一次並行傳送完整的一個位元組信息。
串列通信埠,即COM1、COM2,一般接滑鼠,外置Modem或其他串口設備。它在一個方向上只能傳送一路信號,一次只能傳送一個二進制位,傳送一個位元組信息時,只能一位一位地依次傳送。
USB埠,可用於U盤、數碼相機、手機、還可以用於列印機。現在的列印機可以通過USB埠直接連接電腦,安裝相應的列印機驅動程序即可使用。電源介面。許多主板上有兩個電源介面,即AT和ATX電源介面,根據所選電源的不同,我們只使用其中的一個就可以了。
鍵盤介面。鍵盤是通過鍵盤介面與主機相連的。ßIDE介面。用來接IDE設備,如硬碟、光碟驅動器等。
在主板上,一般都有ROM-BIOS,是固化在只讀存儲器中的系統引導程序。它保存著電腦最重要的基本輸入輸出的程序,系統設置信息,開機上電自檢程序和系統啟動自舉程序。只讀存儲器平時是只讀不寫的。
控制晶元是中央處理器的全權代表,是主板的靈魂。中央處理器通過控制晶元組對主板上的各個部件進行控制。控制晶元組的性能不同,主板的性能就不同,所以,控制晶元組是區分主板的一個重要標志。

8. 關於socket非同步和同步通信的區別

1、匯流排(Bus)計算機各種功能部件間傳送信息公共通信干線由導線組傳輸線束 按照計算機所傳輸信息種類計算機匯流排劃數據匯流排、址匯流排控制匯流排別用傳輸數據、數據址控制信號
匯流排種內部結構cpu、內存、輸入、輸設備傳遞信息公用通道主機各部件通匯流排相連接外部設備通相應介面電路再與匯流排相連接形計算機硬體系統計算機系統各部件間傳送信息公共通路叫匯流排微型計算機匯流排結構連接各功能部件
2、同步通信
所謂同步通信指約定通信速率發送端接收端鍾信號頻率相信始終保持致(同步)保證通信雙發送接收數據具完全致定關系
同步通信許字元組信息組或稱信息幀每幀始用同步字元指示由於發送接收雙採用同鍾所傳送數據同要傳送鍾信號便接收用鍾信號確定每信息位
同步通信要求傳輸線路始終保持連續字元位流若計算機沒數據傳輸則線路要用專用空閑字元或同步字元填充
同步通信傳送信息位數幾乎受限制通通信傳數據幾十幾千位元組通信效率較高要求通信保持精確同步鍾所其發送器接收器比較復雜本較高般用於傳送速率要求較高場合
非同步通信指通信兩字元間間間隔固定字元內各位間間隔固定
非同步通信規定字元由起始位(start bit)、數據位(data bit)、奇偶校驗位(parity)停止位(stop bit)組起始位表示字元始接收用起始位使自接收鍾與數據同步停止位則表示字元結束種用起始位始停止位結束所構串信息稱幀(frame)(注意:非同步通信幀與同步通信幀同非同步通信幀包含字元同步通信幀包含幾十千字元)傳送字元由位低電平起始位始接著傳送數據位數據位位數5~8傳輸按低位前高位順序傳送奇偶校驗位用於檢驗數據傳送確性沒由程序指定傳送高電平停止位停止位1位、1.5位或2位停止位結束字元起始位間空閑位要由高電平2填充(要發送字元線路始終空閑位)
敘述看非同步通信每接收字元接收都要重新與發送主同步所接收端同步鍾信號並需要嚴格與發送同步要字元傳輸間范圍內能保持同步即意味著南鍾信號漂移要求要比同步信號低硬體本要低非同步傳送字元要增加約20%附加信息位所傳送效率比較低非同步通信式簡單靠容易實現故廣泛應用於各種微型機系統
非同步通信同步通信比較
(1)非同步通信簡單雙鍾允許定誤差同步通信較復雜雙鍾允許誤差較
(2)非同步通信適用於點 點同步通信用於點
(3)通信效率:非同步通信低同步通信高
3、
存取周期:
(1)信息代碼存入存儲器稱寫信息代碼存儲器取稱讀 (2)存儲器進行讀或寫操作所需間稱存儲器訪問間(或讀寫間)連續啟兩獨立讀或寫操作(連續兩讀操作)所需短間稱存取周期(或存儲周期) (3)微型機內存儲器目前都由規模集電路制其存取周期短約幾十百納秒(ns)左右
存取間:RAM 完數據存取所用平均間(納秒單位)存取間等於址設置間加延遲間(初始化數據請求間訪問准備間) 讀間與寫入間統稱存取間 稱存儲器訪問間指啟存儲器操作完該操作所經歷間具體講讀操作命令發該操作完數據讀入數據緩沖寄存器謂所經歷間即存儲器存取間 需要指存取間存儲周期通存儲周期略於存取間
4、存儲器帶寬:單位間存儲器所存取信息量 體現數據傳輸速率技術指標 (位/秒位元組/秒) 存儲器帶寬決定存儲器機器獲取信息傳輸速度改善機器瓶頸關鍵素 提高存儲器帶寬採取措施: 1、縮短存取周期; 2、增加存儲字使每存取周期讀/寫更二進制位數; 3、增加存儲體 計算:帶寬=每存取周期訪問位數/存取周期存取周期500ns每存取周期訪問16位則帶寬32M位/s
帶寬單位KB/s
所用32/8=4B約等於0.004KB(1KB=1024B)
200ns=2x10^-7s
所帶寬:4x10^-3/2x10^7=20000KB/S
5、靜態RAM靠雙穩態觸發器記憶信息;態RAM靠MOS電路柵極電容記憶信息由於電容電荷泄漏需要定給與補充所態RAM需要設置刷新電路態RAM比靜態RAM集度高、功耗低本低適於作容量存儲器所主內存通採用態RAM高速緩沖存儲器(Cache)則使用靜態RAM另外內存應用於顯卡、音效卡及CMOS等設備用於充設備緩存或保存固定程序及數據

9. 如何通過Socket實現進程間非同步通訊

訊的另一方則是與socket的服務端邦定
*
*/
public class Test3 extends CommThread implements DealWith
{
private static Test3 test3 = new Test3(2000);
private SignalSocketThread ssThread = new SignalSocketThread();
public Test3(int sleepTime)
{
super(sleepTime);
this.setName("Test3Thread");
}
/**
* Test3必須繼承CommThread
* 覆寫dispose()

閱讀全文

與phpsocket非同步相關的資料

熱點內容
真軍片 瀏覽:976
linux常用命令詳解pdf 瀏覽:160
女主穿越成鼎爐被鬼做 瀏覽:289
javahtml編輯器 瀏覽:777
泰國罪孽父親出海完整地 瀏覽:321
源碼的數據表示範圍 瀏覽:220
樹莓派能不能編譯匯編語言 瀏覽:980
如何用單片機產生sent信號 瀏覽:359
屋面工程量演算法 瀏覽:249
芭比公主動畫電影36部 瀏覽:118
割乳房的香港電影 瀏覽:623
愛情片推薦 電影中國范冰冰 瀏覽:230
邵氏電影有多少武俠 瀏覽:460
pdf怎樣看已加密 瀏覽:423
啄木鳥 電影 瀏覽:597
有域名和伺服器和源碼如何建立網站 瀏覽:174
php訂單管理系統源碼 瀏覽:588
母親的職業2李采譚 瀏覽:31
蛇跟一個小男孩的電影 瀏覽:779
0855 在線 瀏覽:968