11-01-2006
I don't know if I'm understanding you correctly, but it seems that the method you are using will make one connection (albiet via a separate thread) to your third-party server per client request? Depending on the volume of requests you incur, they may not like this.
I'd suggest something along the lines of a worker thread model where you create a distinct and known number of worker threads that hang off the third party server. You feed them requests via the worker/consumer queue (see any thread book for guidance on this model) and they then answer the request either via a response queue, or can directly write the results back to the client.
Regardless, this is not the easiest way to implement things. However, constantly spawning threads on a per/request basis may not be the best way to handle things, nor is consuming mass amounts of connections to your third party server.
I suggest picking up a book on thread techniques that will go over various patterns with you and explain how they work. I think the one I have is put out by O'Reilly, but I don't have it with me and I don't remember off-hand.
Also, your main thread could easily handle a resonable amount of client activity by itself without spawning separate threads for each client. I'm not sure how long your client connections last, but keep in mind that many OSes will limit the number of threads you can create in an app. If you have more than that many concurrent clients then you're in trouble and can't spawn any more threads. Keep this in mind if you decide to go that route.
10 More Discussions You Might Find Interesting
1. Programming
Hi,
I have been trying to create a sharef object on my HP UX 11 machine
(HP-UX <myhostname> B.11.00 A 9000/879 ...... two-user license)
to create the shared object first I am creating the object file using
cc -Aa -c +z dyn.c
(I use -Aa and +z as per HP's manual on linkers ) to create the... (0 Replies)
Discussion started by: linuxpenguin
0 Replies
2. Linux
Hi All,
I created the share object file using
gcc -shared -fpic mypp.cpp -o myp.so
but, pls tell me how to link this .so file to my client program.
Thanks (0 Replies)
Discussion started by: sarwan
0 Replies
3. AIX
Hi,
When using shared objects on AIX 4.3 i am getting runtime problems.
I have a small sample program which links to a shared object libray, oracle and system related libraries.
At runtime it fails (gives segmentation fault and coredump ) in one proc file when executing login statement.
But... (0 Replies)
Discussion started by: suman_jakkula
0 Replies
4. UNIX for Advanced & Expert Users
Hi All,
I have a problem with the shared objects setup in AIX. We have a customized shell written by the developers over here. When i issue a MQ Series command (mqsilist) it is giving the error as . All the commands making use of this libImbCmdLib.a.so is failing. But when executed in normal... (1 Reply)
Discussion started by: dhanamurthy
1 Replies
5. Shell Programming and Scripting
Hi,
I have created a shared object (abc.so) which has a function sum(int a, int b).
Is there any way to load the "abc.so" and use the sum function using shell script..
thanks in advance (2 Replies)
Discussion started by: yhacks
2 Replies
6. AIX
Hi all,
I am developing an application with two components. One "c" binary and one "C++" shared object.
While execution, the shared object crashes out and core dump is created whenever "new" is executed. But if i use malloc this will work perfectly.
I tried to use dbx. Below given was... (1 Reply)
Discussion started by: itssujith
1 Replies
7. Programming
Hello,
While running a c++ shared object on AIX I am facing below error -
rtld: 0712-001 Symbol __ct__3ETDFv was referenced
from module /bancs/aml/lib/libmonitor.so(), but a runtime definition
of the symbol was not found.
rtld: 0712-001 Symbol etd_insert__3ETDFv was... (3 Replies)
Discussion started by: yatrik007
3 Replies
8. Red Hat
Hi,
I would like to create a shared object ( .so).
This shared object
1. uses the functions from a library.
2. Also it should be able to use the global variable in an app
To achieve this what should I do ? 1) To use the functions in the library should I give the -ld option while... (1 Reply)
Discussion started by: rvan
1 Replies
9. Programming
Hello,
I am new to programming shared objects and I was hoping someone could tell me if what I want to do is possible, or else lead me in the right direction.
I have a main program that contains an abstract base class. I also have a subclass that I'm compiling as a shared object. The subclass... (13 Replies)
Discussion started by: dorik
13 Replies
10. Programming
Hello,
I am not that experienced with Linux, and I am currently facing some issues.
The application I'm working on uses hundreds of threads. To optimize the memory usage, I am putting all my data inside a shared object (so).
The steps for this are as follows:
1. a C file (generated... (17 Replies)
Discussion started by: Maelstrom
17 Replies
LEARN ABOUT LINUX
door_server_create
door_server_create(3DOOR) Door Library Functions door_server_create(3DOOR)
NAME
door_server_create - specify an alternative door server thread creation function
SYNOPSIS
cc -mt [ flag ... ] file ... -ldoor [ library ... ]
#include <door.h>
void (*) () door_server_create(void (*create_proc)(door_info_t*));
DESCRIPTION
Normally, the doors library creates new door server threads in response to incoming concurrent door invocations automatically. There is no
pre-defined upper limit on the number of server threads that the system creates in response to incoming invocations (1 server thread for
each active door invocation). These threads are created with the default thread stack size and POSIX (see standards(5)) threads cancella-
tion disabled. The created threads also have the THR_BOUND | THR_DETACHED attributes for Solaris threads and the PTHREAD_SCOPE_SYSTEM
| PTHREAD_CREATE_DETACHED attributes for POSIX threads. The signal disposition, and scheduling class of the newly created thread are
inherited from the calling thread (initially from the thread calling door_create(), and subsequently from the current active door server
thread).
The door_server_create() function allows control over the creation of server threads needed for door invocations. The procedure create_proc
is called every time the available server thread pool is depleted. In the case of private server pools associated with a door (see the
DOOR_PRIVATE attribute in door_create()), information on which pool is depleted is passed to the create function in the form of a
door_info_t structure. The di_proc and di_data members of the door_info_t structure can be used as a door identifier associated with the
depleted pool. The create_proc procedure may limit the number of server threads created and may also create server threads with appropri-
ate attributes
(stack size, thread-specific data, POSIX thread cancellation, signal mask, scheduling attributes, and so forth) for use with door invoca-
tions.
The specified server creation function should create user level threads using thr_create() with the THR_BOUND flag, or in the case of
POSIX threads, pthread_create() with the PTHREAD_SCOPE_SYSTEM attribute. The server threads make themselves available for incoming door
invocations on this process by issuing a door_return(NULL, 0, NULL, 0). In this case, the door_return() arguments are ignored. See
door_return(3DOOR) and thr_create(3C).
The server threads created by default are enabled for POSIX thread cancellations which may lead to unexpected thread terminations while
holding resources (such as locks) if the client aborts the associated door_call(). See door_call(3DOOR). Unless the server code is truly
interested in notifications of client aborts during a door invocation and is prepared to handle such notifications using cancellation
handlers, POSIX thread cancellation should be disabled for server threads using pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL).
The create_proc procedure need not create any additional server threads if there is at least one server thread currently active in the
process (perhaps handling another door invocation) or it may create as many as seen fit each time it is called. If there are no available
server threads during an incoming door invocation, the associated door_call() blocks until a server thread becomes available. The cre-
ate_proc procedure must be MT-Safe.
RETURN VALUES
Upon successful completion, door_server_create() returns a pointer to the previous server creation function. This function has no failure
mode (it cannot fail).
EXAMPLES
Example 1: Creating door server threads.
The following example creates door server threads with cancellation disabled and an 8k stack instead of the default stack size:
#include <door.h>
#include <pthread.h>
#include <thread.h>
void *
my_thread(void *arg)
{
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
door_return(NULL, 0, NULL, 0);
}
void
my_create(door_info_t *dip)
{
thr_create(NULL, 8192, my_thread, NULL,
THR_BOUND | THR_DETACHED, NULL);
}
main()
{
(void)door_server_create(my_create);
...
}
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Architecture |all |
+-----------------------------+-----------------------------+
|Availability |SUNWcsu |
+-----------------------------+-----------------------------+
|Interface Stability |Evolving |
+-----------------------------+-----------------------------+
|MT-Level |Safe |
+-----------------------------+-----------------------------+
SEE ALSO
door_bind(3DOOR), door_call(3DOOR), door_create(3DOOR), door_return(3DOOR), libdoor(3LIB), pthread_create(3C), pthread_setcancelstate(3C),
thr_create(3C), attributes(5), cancellation(5), standards(5)
SunOS 5.10 20 Aug 1997 door_server_create(3DOOR)