summaryrefslogtreecommitdiff
path: root/examples/Reactor/Proactor/README
blob: 6509e3efcb477dabfb06a0fd63d448e2f15a069c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
This README file lists all the example applications for the Proactor framework. 

Test/Example Applications for Proactor:
=========================================

The following tests are available.
        
o $ACE_ROOT/tests/Aio_Platform_Test.cpp : Tests basic limits
        pertaining to the  POSIX features 

o $ACE_ROOT/examples/Reactor/Proactor/test_aiocb.cpp    : 
        This is a C++ program for testing the AIOCB (AIO Control
        Blocks) based completion approach which uses <aio_suspend> for
        completion querying. 

o $ACE_ROOT/examples/Reactor/Proactor/test_aiosig.cpp   : This is a
        C++ program for testing the Signal based completion approach
        that uses <sigtimedwait> for completion querying. 

o $ACE_ROOT/examples/Reactor/Proactor/test_aiocb_ace.cpp: Portable
        version of test_aiocb.cpp. (Same as test_aiocb.cpp, but uses
        ACE_DEBUGs instead of printf's and ACE_Message_Blocks instead
        of char*'s. 

o $ACE_ROOT/examples/Reactor/Proactor/test_aiosig_ace.cpp: Portable
        version of test_aiosig.cpp. (Same as test_aiosig.cpp, but uses
        ACE_DEBUGs instead of printf's and ACE_Message_Blocks instead
        of char*'s. 

o test_proactor.cpp (with ACE_POSIX_AIOCB_Proactor)     : Test for
        ACE_Proactor which uses AIOCB (AIO Control Blocks) based
        completions strategy Proactor. (#define
        ACE_POSIX_AIOCB_PROACTOR in the config file, but this is the
        default option)

o test_proactor.cpp (with ACE_POSIX_SIG_Proactor)     : Test for
        ACE_Proactor which uses real time signal based completion
        strategy proactor. (#define ACE_POSIX_SIG_PROACTOR in the
        config file)

o test_multiple_loops.cpp       : This example application shows how
        to write programs that combine the Proactor and Reactor event
        loops. This is possible only on WIN32 platform.
       
o test_timeout.cpp      : Multithreaded application testing the Timers
        mechanism of the Proactor.

o test_timeout_st.cpp   : Sinle threaded version of test_timeout.cpp.



Behavior of POSIX AIO of various platforms:
==========================================



Summary:
======
                        Sun     Sun     Lynx
                        5.6     5.7     
                        
test_aiocb_ace          Good    Good    Good    
(test_aiocb)

test_aiosig_ace         Inconst Inconst Inconst


Inconst.: Inconsistent execution.



Aio_Platform_Test:
================

                
Sun5.6 CC:	
---------
        Status  : OK

	Problems: 1.The constant which indicates the maximum
                        concurrent asynchronous I/Os is -1 at run
                        time. This should be atleast 1.

Sun57 CC:
--------        
        Status  : OK
        
        Problems: <Same as in sun56 CC>

Lynx g++:
--------
        Status  : OK
        
        Problems: AIO_LISTIO_MAX, AIO_MAX and SIGQUEUE_MAX are defined
                        but their values are -1

test_aiocb.cpp
=============

Sun5.6 CC:	
---------
        Status  : GOOD

	Problems: NONE
                
Sun57 CC:
--------        
        Status  : GOOD
        
        Problems: NONE

Lynx g++:
--------



test_aiosig.cpp:
===============

Sun5.6 CC:	
---------
        Status  : GOOD

	Problems: NONE
                
Sun57 CC:
--------        
        Status  : BAD
        
        Problems: 1. If 2 <aio_> calls are issed, only one completion
                        gets through, second one hangs.

Lynx g++:
--------



test_aiosig_ace.cpp:
====================

Sun5.6 CC:	
---------
        Status  : BAD

	Problems: 1. <aio_read> and <aio_write> calls return 0 but
                        sets the<errno> to 48 which is <Operation Not
                        Supported> 
	
                  2. I issue <aio_read/write> with a RT signal enabled. It
                         returns but with the a wrong signal code, -2, which is
                         SI_QUEUE. But we are supposed to get SI_ASYNCIO
              
                  3*.IMPORTANT: If I issue two <aio_read/write> calls,
                        they get queued and 
                        they execute correctly. But their completions are not
                         queued up correctly.
                              
                  4. Calling <sigtimedwait> sometimes print the string 
                	   "err = 22". But <sigtimedwait> doesnt return a error and
                	   errno is also not set to any error values. (err == 22, may
                	   be referring to errno 22 which means Invalid Argument) 
                
Sun57 CC:
--------        
        Status  : BAD
        
        Problems: <same as in sun56 CC>

Lynx g++:
--------
        
        Status  : OK

        Problems: 1. In between my Proactor test application the
                        <errno> is getting set to <77>. This means
                        Unsupported POSIX operation. But none of my
                        <posix> calls return -1.        
          
        TO-DO   : 1. Run <gdb> and watch for <errno> and figure when
                        it is changing over to 77.