state-threads icon indicating copy to clipboard operation
state-threads copied to clipboard

Support Multiple Threads for Linux and Darwin only.

Open winlinvip opened this issue 4 years ago • 3 comments

For WebRTC or UDP transport system, multiple threads or CPUs is essential important, please read https://github.com/ossrs/srs/issues/2188

The first step, is to simplify the state-threads. We should remove the dead code for UDP server:

  • [x] Remove multiple OS support, only for Linux(CentOS,Ubuntu,etc) and Darwin(macOS).
  • [x] Remove the examples and extensions.
  • [x] Remove the poll support, only Linux epoll and Darwin kqueue.
  • [x] Remove the support for multiple processes, for single process only.
  • [x] Stack always grows from top to down.
  • [x] Remove the deprecated serialize accept.

Then, we should use gcc __thread for multiple threads:

  • [x] Support gtest and gocv/gcovr coverage analysis.
  • [x] Change all global or static variables to __thread, see toffaletti befca4dfbd, 9b617a6a02, f0ebf18d8f, 527931ce8e.
  • [ ] Add utest for threads and codes.

winlinvip avatar Feb 23 '21 23:02 winlinvip

UTest and coverage for ST is introduced by SRS#1b2822a5a4, of course, it'll be merged to this repository if done.

image

winlinvip avatar Mar 02 '21 04:03 winlinvip

对ST做了大幅度简化:https://github.com/ossrs/state-threads/commit/eda23b223ff901589952f0501038c959c88dd340

For #19: Simplify ST, only support LINUX and DARWIN

1. Remove examples and extensions.
2. Remove OS support, except LINUX and DARWIN.
3. Rename md.S to md_linux.S, remove __ia64__ support.
4. Remove events support, except kqueue and epoll.
5. Refine utest, add auto/fast.sh support.

简化前,一共是9123行,核心代码5834行:

homeMacOS:state-threads winlin$ wc -l *.h *.c *.S 
     480 common.h
     645 md.h
     176 public.h
    1446 event.c
     922 io.c
     121 key.c
     783 sched.c
     173 stk.c
     368 sync.c
     644 md.S
      76 md_darwin.S
    5834 total

简化后,核心代码4448行:

homeMacOS:state-threads winlin$ wc -l *.h *.c *.S 
     473 common.h
     232 md.h
     174 public.h
     913 event.c
     815 io.c
     121 key.c
     751 sched.c
     173 stk.c
     368 sync.c
      76 md_darwin.S
     352 md_linux.S
    4448 total

一共简化了1386行代码,23%左右代码。简化后,UTest和覆盖的难度降低了,之前存在大量无法覆盖的代码。

简化后,只支持LINUX和DARWIN平台,事件框架只支持kqueue和epoll。

winlinvip avatar Mar 21 '21 06:03 winlinvip

多线程的单元测试,单独提了一个issue #31

winlinvip avatar Aug 24 '22 02:08 winlinvip