⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme

📁 快速开发
💻
字号:
WELCOME!The State Threads Library is a small application library which providesa foundation for writing fast and highly scalable Internet applications(such as web servers, proxy servers, mail transfer agents, and so on,really any network-data-driven application) on UNIX-like platforms.  Itcombines the simplicity of the multithreaded programming paradigm, inwhich one thread supports each simultaneous connection, with theperformance and scalability of an event-driven state machinearchitecture.  In other words, this library offers a threading API forstructuring an Internet application as a state machine.  For moredetails, please see the library documentation in the "docs" directory oron-line at    http://state-threads.sourceforge.net/docs/The State Threads Project is an open source project for maintaining andenhancing the State Threads Library.  For more information about thisproject, please see    http://state-threads.sourceforge.net/BUILDINGTo build the library by hand, use the GNU make utility.  Run the makecommand (e.g., `gmake') with no arguments to display all supportedtargets.To build more or less automatically, first set the CONFIG_GUESS_PATHvariable in either osguess.sh or your environment then run "makedefault" which guesses your OS and builds.  Requires the "config.guess"utility from GNU autoconf (not included with ST).  You can use one froma larger "main" software project or just use any config.guess availableon your system.  You can also get it directly from GNU:ftp://ftp.gnu.org/gnu/autoconf/To build rpms (RedHat Linux 6.2 or later, Linux/Mandrake, Solaris withgnome, etc.):    download the latest st-x.y.tar.gz    # rpm -ta st-x.y.tar.gzThe .rpms will land in /usr/src/RPMS/<arch>.  Install them with:    # rpm -i libst*.rpmRequires GNU automake and rpm 3.0.3 or later.Debian users:  If you run potato, please upgrade to woody.  If you run woody, "apt-get install libst-dev" will get you v1.3.  If you run testing/unstable, you will get the newest available version.  If you *must* have the newest libst in woody, you may follow these  not-recommended instructions:    1. Add "deb-src <your-favourite-debian-mirror> unstable main" to your       /etc/apt/sources.list    2. apt-get update    3. apt-get source st    4. cd st-1.4 (or whatever version you got)    5. debuild    6. dpkg -i ../*.debIf your application uses autoconf to search for dependencies and youwant to search for a given version of libst, you can simply add        PKG_CHECK_MODULES(MYAPP, st >= 1.3 mumble >= 0.2.23)to your configure.ac/in.  This will define @MYAPP_LIBS@ and@MYAPP_CFLAGS@ which you may then use in your Makefile.am/in files tolink against mumble and st.LICENSEThe State Threads library is a derivative of the Netscape PortableRuntime library (NSPR).  All source code in this directory isdistributed under the terms of the Mozilla Public License (MPL) version1.1 or the GNU General Public License (GPL) version 2 or later.  Formore information about these licenses please seehttp://www.mozilla.org/MPL/ and http://www.gnu.org/copyleft/.All source code in the "examples" directory is distributed under the BSDstyle license.PLATFORMSPlease see the "docs/notes.html" file for the list of currentlysupported platforms.DEBUGGER SUPPORTIt's almost impossible to print SP and PC in a portable way.  The onlyway to see thread's stack platform-independently is to actually jump tothe saved context.  That's what the _st_iterate_threads() function does.Do the following to iterate over all threads:- set the _st_iterate_threads_flag to 1 in debugger- set breakpoint at the _st_show_thread_stack() function  (which does nothing)- call the _st_iterate_threads() function which jumps to the  next thread- at each break you can explore thread's stack- continue- when iteration is complete, you return to the original  point (you can see thread id and a message as arguments of  the _st_show_thread_stack() function).You can call _st_iterate_threads() in three ways:- Insert it into your source code at the point you want to  go over threads.- Just run application and this function will be called at  the first context switch.- Call it directly from the debugger at any point.This works with gdb and dbx.Example using gdb:(gdb) set _st_iterate_threads_flag = 1(gdb) b _st_show_thread_stack...(gdb) call _st_iterate_threads()...(gdb) bt...(gdb) c...(gdb) bt...(gdb) c...and so on..._st_iterate_threads_flag will be set to 0 automaticallyafter iteration is over or you can set it to 0 at any timeto stop iteration.Sometimes gdb complains about SIGSEGV when you call a functiondirectly at gdb command-line.  It can be ignored -- just call thesame function right away again, it works just fine.  For example:(gdb) set _st_iterate_threads_flag = 1(gdb) b _st_show_thread_stackBreakpoint 1 at 0x809bbbb: file sched.c, line 856.(gdb) call _st_iterate_threads()Program received signal SIGSEGV, Segmentation fault.....(gdb) # just call the function again:(gdb) call _st_iterate_threads()Breakpoint 1, _st_show_thread_stack (thread=0x4017aee4, messg=0x80ae7a2"Iteration started")    at sched.c:856856     }....You can use simple gdb command-line scripting to displayall threads and their stack traces at once:(gdb) while _st_iterate_threads_flag >bt >c >end....Another script to stop at the thread with the specific thread id(e.g., 0x40252ee4):(gdb) # set the flag again:(gdb) set _st_iterate_threads_flag = 1(gdb) call _st_iterate_threads()Breakpoint 1, _st_show_thread_stack (thread=0x4017aee4, messg=0x80ae7a2"Iteration started")    at sched.c:856856     }....(gdb) while thread != 0x40252ee4 >c >end........Breakpoint 1, _st_show_thread_stack (thread=0x40252ee4, messg=0x0) atsched.c:856856     }(gdb) bt....(gdb) # don't want to continue iteration, unset the flag:(gdb) set _st_iterate_threads_flag = 0(gdb) cContinuing.Breakpoint 1, _st_show_thread_stack (thread=0x0, messg=0x80ae78e "Iterationcompleted")    at sched.c:856856     }(gdb) cContinuing.(gdb) returnMake selected stack frame return now? (y or n) y#0  0x4011254e in __select ()   from /lib/libc.so.6(gdb) detachCHANGE LOGChanges from 1.7 to 1.8.--------------------------o  Added support for kqueue and epoll on platforms that support them.   Added ability to choose the event notification system at program   startup.o  Long-overdue public definitions of ST_UTIME_NO_TIMEOUT (-1ULL) and   ST_UTIME_NO_WAIT (0) [bug 1514436].o  Documentation patch for st_utime() [bug 1514484].o  Documentation patch for st_timecache_set() [bug 1514486].o  Documentation patch for st_netfd_serialize_accept() [bug 1514494].o  Added st_writev_resid() [rfe 1538344].o  Added st_readv_resid() [rfe 1538768] and, for symmetry, st_readv().Changes from 1.6 to 1.7.------------------------o  Support glibc 2.4, which breaks programs that manipulate jump buffers.   Replaced Linux IA64 special cases with new md.S that covers all   Linux.Changes from 1.5.2 to 1.6.--------------------------noneChanges from 1.5.1 to 1.5.2.----------------------------o  Alfred Perlstein's context switch callback feature.o  Claus Assmann's st_recvmsg/st_sendmsg wrappers.o  Extra stack padding for platforms that need it.o  Ron Arts's timeout clarifications in the reference manual.o  Raymond Bero and Anton Berezin's AMD64 FreeBSD port.o  Claus Assmann's AMD64 SunOS 5.10 port.o  Claus Assmann's AMD64 OpenBSD port.o  Michael Abd-El-Malek's Mac OS X port.o  Michael Abd-El-Malek's stack printing patch.Changes from 1.5.0 to 1.5.1.----------------------------o  Andreas Gustafsson's USE_POLL fix.o  Gene's st_set_utime_function() enhancement.Changes from 1.4 to 1.5.0.--------------------------o  Andreas Gustafsson's performance patch.o  New extensions:  Improved DNS resolver, generic LRU cache, in-process   DNS cache, and a program to test the resolver and cache.o  Support for AMD Opteron 64-bit CPUs under Linux.o  Support for SPARC-64 under Solaris.o  Andreas Gustafsson's support for VAX under NetBSD.o  Changed unportable #warning directives in md.h to #error.Changes from 1.3 to 1.4.------------------------o  Andreas Gustafsson's NetBSD port.o  Wesley W. Terpstra's Darwin (MacOS X) port.o  Support for many CPU architectures under Linux and *BSD.o  Renamed private typedefs so they don't conflict with public ones any   more.o  common.h now includes public.h for strict prototyping.o  Joshua Levy's recommendation to make st_connect() and st_sendto()   accept const struct sockaddr pointers, as the originals do.o  Clarified the documentation regarding blocking vs. non-blocking I/O.o  Cygwin support.o  Created the extensions directory.o  Fixed warnings from ia64asm.S.Changes from 1.2 to 1.3.------------------------o  Added st_read_resid() and st_write_resid() to allow the caller to know   how much data was transferred before an error occurred.  Updated   documentation.o  Updated project link, copyrights, and documentation regarding   timeouts.  Added comment to st_connect().o  Optimized the _st_add_sleep_q() function in sched.c.  Now we walk the   sleep queue *backward* when inserting a thread into it.  When you   have lots (hundreds) of threads and several timeout values, it takes   a while to insert a thread at the appropriate point in the sleep   queue.  The idea is that often this appropriate point is closer to   the end of the queue rather than the beginning.  Measurements show   performance improves with this change.  In any case this change   should do no harm.o  Added a hint of when to define USE_POLL and when not to, to the   Makefile.o  Added debugging support (files common.h and sched.c).   See above.o  Decreased the number of reallocations of _ST_POLLFDS in sched.c.   Inspired by Lev Walkin.o  Fixed st_usleep(-1) and st_sleep(-1), and added a warning to the   documentation about too-large timeouts.o  Linux/*BSD Alpha port.o  Wesley W. Terpstra modernized the build process:   - properly build relocatable libraries under bsd and linux   - use library versioning   - added rpm spec file   - added debian/ files   See above for build instructions.Changes from 1.1 to 1.2.------------------------o  Added st_randomize_stacks().o  Added a patch contributed by Sascha Schumann.Changes from 1.0 to 1.1.------------------------o  Relicensed under dual MPL-GPL.o  OpenBSD port.o  Compile-time option to use poll() instead of select() for   event polling (see Makefile).   This is useful if you want to support a large number of open   file descriptors (larger than FD_SETSIZE) within a single   process.o  Linux IA-64 port.   Two issues make IA-64 different from other platforms:   - Besides the traditional call stack in memory, IA-64 uses the     general register stack.  Thus each thread needs a backing store     for the register stack in addition to the memory stack.   - Current implementation of setjmp()/longjmp() can not be used     for thread context-switching since it assumes that only one     register stack exists.  Using special assembly functions for     context-switching is unavoidable.    o  Thread stack capping on IRIX.   This allows some profiling tools (such as SpeedShop) to know when   to stop unwinding the stack.  Without this libexc, used by SpeedShop,   traces right off the stack and crashes.o  Miscellaneous documentation additions.COPYRIGHTSPortions created by SGI are Copyright (C) 2000 Silicon Graphics, Inc.All Rights Reserved.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -