다중 스레드 프로그램에 대한 참고 사항

스레드 간의 보안

동일한 프로세스의 여러 스레드는 리소스 공유입니다. 즉, 동일한 메모리 주소의 변수에 액세스 할 수 있습니다. 예 : 각 스레드에 전역 변수 및 정적 변수에 대한 읽기 작업 만 있고 쓰기 작업은없는 경우 일반적으로이 전역 변수는 스레드로부터 안전합니다. 여러 스레드가 동시에 쓰기 작업을 수행하는 경우 일반적으로 스레드 동기화를 고려해야합니다. , 그렇지 않으면 스레드 안전성에 영향을 미칠 수 있습니다.

스레드 간 교착 상태

스레드 간의 보안을 해결하기 위해 Java 잠금 메커니즘이 도입되었으며주의하지 않으면 다른 스레드가 전혀 해제 할 수없는 잠금을 기다리고 있기 때문에 Java 스레드 교착 상태의 멀티 스레딩 문제가 발생합니다. 작업을 완료 할 수 없습니다. 배고픈 두 사람을 나타내는 두 개의 실이 있다고 가정 해 보겠습니다. 그들은 칼과 포크를 공유하고 교대로 먹어야합니다. 그들은 둘 다 두 개의 자물쇠, 즉 공유 나이프와 공유 포크를 획득해야합니다.
실 A가 칼을 받고 실 B가 포크를 얻는다고 가정합니다. 스레드 A는 포크를 기다리기 위해 차단 상태에 들어가고 스레드 B는 스레드 A가 소유 한 나이프를 기다리기 위해 차단됩니다. 이것은 인위적인 설계의 한 예일 뿐이지 만 런타임시 감지하기는 어렵지만 이러한 유형의 상황이 자주 발생합니다.
(3) 스레드가 너무 많으면 서버 리소스가 소모되고 충돌이 발생
합니다. 스레드가 너무 많으면 시스템 생성이 많이 발생할 수 있습니다. 스레드는 시스템 메모리와 CPU "전환 전환"을 사용하여 시스템 충돌을 일으킨 다음 이러한 종류의 문제를 어떻게 해결합니까?
파일 설명자와 같은 일부 시스템 리소스는 제한됩니다. 다중 스레드 프로그램은 리소스가 부족할 수 있습니다. 각 스레드는 그러한 리소스를 하나 갖고 싶어하기 때문입니다. 스레드 수가 상당히 많거나 리소스에 대한 후보 스레드 수가 사용 가능한 리소스 수를 훨씬 초과하는 경우 리소스 풀을 사용하는 것이 가장 좋습니다. 가장 좋은 예 중 하나는 데이터베이스 연결 풀링입니다. 스레드가 데이터베이스 연결을 사용해야하는 한 풀에서 하나를 가져와 사용 후 풀로 반환합니다. 리소스 풀은 리소스 라이브러리라고도합니다.
멀티 스레드 애플리케이션 개발을위한 많은 예방책이 있으며, 앞으로 작업에서 모든 사람들이 그 위험을 천천히 깨닫기를 바랍니다.

추천

출처blog.csdn.net/qq_41489540/article/details/109097408