POSIX 실시간 신호를 사용하는 사람과 그 이유는?
나는 솔직하지 않아요 정말 이해가 안 돼요.그 자료들을 다 읽었는데 사용 사례를 알 수가 없네요.signal()과 같은 장점들이 충분히 명확한 API에 대해 그렇게 많이 이야기하고 있지는 아닙니다.오히려 RT 신호는 사용자 공간을 의미하는 것 같지만 어떤 목적으로 생성됩니까?유일한 용도는 원시적인 IPC인 것처럼 보이지만 모든 것이 IPC의 형편없는 형태(예: 어색하고 제한된 정보, 특별히 효율적이지 않은 정보 등)임을 지적합니다.
그렇다면 그것들은 어디서 어떻게 사용되는 것일까요?
우선 벤의 대답이 정확하다는 것을 주목하세요.제가 아는 한, POSIX에서 실시간 신호의 전체 목적은 AIO, 메시지 큐 알림, 타이머 만료 및 애플리케이션 정의 신호(내부 및 프로세스 간 모두)를 위한 실시간 전달 메커니즘입니다.
그렇게 말하면, 일반적으로 신호는 일을 처리하는 데 정말 나쁜 방법입니다.
- 신호 처리기는 비동기식이므로 비동기식 신호-안전하지 않은 기능을 중단하지 않는 한 비동기식 신호-안전하지 않은 기능만 사용할 수 있으므로 수행할 수 있는 작업이 심각하게 제한됩니다.
- 신호 처리기는 전역 상태입니다.라이브러리는 어떤 신호를 사용할 수 있는지, 시콜 인터럽트를 허용하는지 등에 대해 호출 프로그램과의 계약 없이 신호를 사용할 수 없습니다.그리고 일반적으로, 세계적인 상태는 단지 나쁜 것일 뿐입니다.
- 사용하는 경우
sigwait
(또는 리눅스)signalfd
extension) 신호를 처리하기 위한 신호 처리기보다는 다른 IPC/알림 메커니즘보다 나을 것이 없고, 더 나쁠 가능성도 있습니다.
는 잘못 하고 IO 는된 POSIX AIO API 를 IO 입니다를 하는 것이 더 입니다.pthread_cond_signal
아니면sem_post
작업이 종료되면 할 수 쌍을 를 자신에게 에서 또는 약간의 성능 비용을 감당할 수 있다면 방금 읽은 데이터를 파이프나 소켓 쌍을 통해 자신에게 다시 전달하고 메인 스레드 프로세스를 통해 일반 파일을 비동기식으로 읽게 할 수도 있습니다를 사용하여 일반 할 .select
아니면poll
소켓/ pipes/티티처럼 말입니다.
비동기 입출력.
실시간 신호는 입출력 작업이 완료되었을 때 커널이 시스템에 알려주는 메커니즘입니다.
struct aiocb
는 비동기 I/O 요청과 신호 번호 사이의 연결을 만듭니다.
오래된 질문이지만, 여전히.
리눅스 in glibc(NPTL)의 POSIX 스레드는 두 개의 실시간 신호를 사용하여 구현됩니다.최소/최대 개수 상수를 조정하여 사용자로부터 숨깁니다.라이브러리 호출이 모든 스레드로 전파되어야 하는 모든 이벤트(예:setuid
)는 다음을 통해 수행됩니다. 스레드 호출은 모든 스레드에 신호를 전송하여 변경 사항을 적용하고 확인 응답을 기다렸다가 계속합니다.
실시간 신호를 사용하는 데는 다른 이유가 있습니다.저는 다양한 외부 장치와 상호 작용하는 앱을 가지고 있으며, 여러 가지 수단(직렬 포트 IO, 심지어 대부분의 사용자가 알고 있는 것보다 오래된 카드의 직접 주소 지정)을 결합하여 사용할 수 있습니다.이것은 정의상 "실시간" 앱입니다. 이것은 "컴퓨터 시간"이 아니라 실세계 시간으로 실세계와 상호작용합니다.
이벤트 처리, 정보 읽기, 시리얼 포트에 결과 쓰기, 데이터베이스에 저장하기 등 대부분의 작업이 주 루프에 있는 데몬 프로세스에서 수행됩니다.기계의 다른 프로세스(사용자 프로세스)는 DB에서 정보를 읽고 표시하는 등의 작업을 수행합니다.이러한 다른 프로세스들에서, 사용자는 다양한 신호들을 데몬에게 보내어, 정지, 변경된 입력 데이터 등의 다양한 조건들을 경고할 수 있습니다.예를 들어, 사용자 프로세스는 "중지" 신호를 보내고, 데몬의 신호 처리기 루틴에는 플래그 변수를 설정하는 약 2줄의 코드가 있습니다.데몬이 기회가 생기면, 그리고 편리해지면, 그것은 멈춰집니다."인터럽트" 코드는 매우 간단하고 빠르고 비침습적입니다.그러나 목적에 부합하고 복잡한 IPC 구조를 필요로 하지 않으며 잘 작동합니다.
네, 이 신호들에 대한 이유가 있습니다.실시간 애플리케이션에서.적절히 처리하면 잘 됩니다, 감사합니다.
언급URL : https://stackoverflow.com/questions/6345973/who-uses-posix-realtime-signals-and-why
'programing' 카테고리의 다른 글
데이터 프레임 팬더의 값 수를 기준으로 그룹화 (0) | 2023.09.23 |
---|---|
워드프레스의 'gmt_offset' 옵션에서 GMT Offset 가져오기 (0) | 2023.09.23 |
MySQL - 조건부 카운트(GROUP BY) (0) | 2023.09.23 |
스위프트의 역범위 (0) | 2023.09.23 |
Npm install에서 경고가 표시되고 npm 감사 수정이 작동하지 않음 (0) | 2023.09.23 |