Synchronous, blocking, asynchronous, and non-blocking Network Programming

Source: Internet
Author: User
Synchronization: if the function is not executed, no return is returned and the thread is suspended.
Blocking: No data function is returned, and the thread is suspended.
Asynchronous: The function returns immediately and notifies the caller through events or signals.
Non-blocking: The function returns immediately and notifies the caller Through select.
In this case, what is the difference between asynchronous and non-blocking?
Asynchronous = non-blocking?
Is synchronization at the operating system level, and blocking at the socket layer?
Is the reactor synchronous?
Answer:
Concepts of synchronous, asynchronous, blocking, and non-blocking
During network programming, we often see four call Methods: synchronous, asynchronous, blocking, and non-blocking. These methods are not easy to understand. The following is my understanding of these terms.
Synchronization
The so-called synchronization means that when a function call is sent, the call will not return until the result is not obtained. According to this definition, its
The vast majority of functions are called synchronously (such as sin,
Isdigit ). But in general, when we talk about synchronization and Asynchronization, we are referring to the tasks that require the collaboration of other components or a certain amount of time. The most common example is
Sendmessage. This function sends a message to a window. This function does not return a message before the recipient finishes processing the message. After the other party completes processing, this function returns the message processing function.
The lresult value is returned to the caller.
Asynchronous
Asynchronous concept and synchronization relative. When an asynchronous process is called, the caller cannot obtain the result immediately. Actually process this call
After the widget is completed, the caller is notified by status, notification, and callback. To
The casycsocket class is used as an example (note that csocket is derived from casyncsocket, but the function has been converted from Asynchronous to synchronous). When a client calls
After the connect function sends a connection request, the caller's thread can immediately run down. After the connection is established, the socket underlying layer sends a message to notify the object. Run
The component and caller return results in three ways: Status, notification, and callback. Which one can be used depends on the implementation of the execution part, unless the execution part provides multiple options, it is not controlled by the caller. If the Execution Department
When the status is used for notification, the caller needs to check each time and the efficiency is very low (some beginners who are new to multi-thread programming prefer to use a loop to check the value of a variable, this is actually a very serious
). If you use the notification method, the efficiency is very high, because the execution of components almost do not need to do additional operations. As for the callback function, there is actually no much difference with the notification.
Blocking
Blocking call means that the current thread will be suspended before the call result is returned. The function is returned only after the result is obtained. Someone may
Blocking calls are equivalent to synchronous calls, but they are actually different. For
For step-by-step invocation, the current thread is still activated, but the current function does not return logically. For example, we call the receive function in csocket.
Data, this function will wait until data is returned. At this time, the current thread will continue to process a variety of messages. If the main window and the called function are in the same thread, unless you operate on a special interface
Function call. In fact, the main interface should be refreshed. Another function Recv used by socket to receive data is an example of blocking calls. When the socket works in blocking mode,
If this function is called without data, the current thread will be suspended until data exists.
Non-blocking
The concept of non-blocking corresponds to blocking, which means that the function will not block the current thread and return immediately before the result cannot be obtained immediately.
Object blocking mode and function calling
Whether the object is in blocking mode is highly correlated with whether the function is blocked or not, but it is not one-to-one. Blocking objects can have
Non-blocking call method, we can use a certain API to poll
To avoid blocking. For non-blocking objects, calling special functions can also be blocked. The select function is an example.
Blocking Communication
--------------------------------------------------------------------------------
Through overlapping communication and computing, high performance can be improved in many systems. An intelligent communication controller automatically executes communications. Light-heavy evidence is a mechanism to achieve such overlap. Lead to good performance
Yes
An optional mechanism is to use non-blocking communication. A blocked sending starts to call the initialization of this sending operation, but it cannot be completed. Before the message is copied from the sending cache, the call to start sending will be returned.
An independent "sending completed" call is required to complete the communication, for example, to check the data copied from the sending cache. Use the appropriate hardware to convert the data stored by the sender after the sender is initialized and before it is completed
It can be performed simultaneously with the computation completed by the sender. Similarly, a non-blocking "receiving starts to call" initializes this receiving operation,
But cannot complete it. Before a message is stored in the receiving cache, this call will return. An independent "receive completed" call is required to complete the receiving operation and check the received cached data.
With appropriate hardware, after receiving operation initialization and before it completes, the data stored in the receiver can be converted at the same time as the computing. The use of non-blocking receiving means that information is provided earlier in the receiving cache location
To avoid system caching and copying from memory to memory.
Non-blocking sending start calling can use the same four modes as blocking sending: Standard, cache,
Synchronization and preparation modes. These have the same meaning. No matter whether a matched recipient is logged on or not, you can start sending in all modes except "prepared". As long as one matched recipient is logged on, you can start a non-
Blocking "prepare" sending. In all cases, the start call of sending is local: no matter the status of other processes, it immediately returns. If this call causes some system resources to run out, it will fail and return
An error code. High-quality MPI implementation should ensure that this situation only occurs when "Diseased. That is, one MPI implementation will support a large number of pending non-blocking operations.
When the data has been copied from the sending cache, this sending completion call is returned. It can have additional meaning, depending on the sending mode.
If the sending mode is "synchronous", only one matching recipient can complete the sending. That is, a receiver has been logged on and matched with the sender. At this time, the sending is complete
No
Local. Note: If a synchronous, non-blocking message matches a non-blocking message before the call is completed,
It can be done. (If the sender "knows" that the conversion will end, it will be able to complete, but before the receiver "knows" that the conversion will end ).
If the sending mode is "cached" and the message is not suspended, the message must be cached. At this time, the sending completion call is local, and it must be successful regardless of the status in which a request is received.
If the sending mode is standard and the message is cached, the sending end call can be returned before a matching message is received. On the other hand, sending is complete until a matching message is received, and the message has been copied to the receiving cache.
Non-blocking sending can be matched by blocking receiving, or vice versa.
Suggestions for users. The sending operation is completed, and the standard mode can be delayed,
The same mode must be delayed,
Until a matched logon request is received. In both cases, the use of non-blocking sending allows the sender to proceed ahead of the receiver, so that the calculation of the speed of the two processes is more tolerant of fluctuations.
Non-blocking sending in cache and readiness modes has a limited impact. One possible non-blocking message will be returned, and one blocking message will be returned after the data is copied from the sender's storage. As long as data copying can be the same as computing, the use of non-blocking transmission has advantages.
The message sending mode implies that communication is initiated by the sender. When the sender initializes communication (data is directly moved to the receiving cache,
Does not require queuing up a pending sending request)
If a receiver has logged on, this communication usually has a low extra burden. However, only after a matched message has been sent can one receive operation be completed. When non-blocking receiving waits for sending, it does not block receiving.
Can be used to lower the additional burden of communication. (End with your suggestions ).
Dr. Douglas C. Schmidt's answer:
They are very different, as follows:
AIO is "asynchronous I/O", I. e., the operation is invoked
Asynchronously and control returns to the client while the OS Kernel
Processes the I/O request .? When the operation completes there is
Some mechanisms for the client to retrieve the results.
Non-blocking I/O tries an operation (such as a read () or write ())
And if it the operation wowould block (e.g., due to flow control on
TCP connection or due to lack of data in a socket), the call returns
-1 and sets errno to ewouldblock.
Dr. Douglas C. Schmidt

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.