싱글보다 느린 멀티가 되는거지..
실질적으로 병렬 계산이 없을테니.. 쓰레드 띄우는 값만 더 들어간셈..
익명(122.56)2022-01-02 16:06
답글
내 말이 그 말 - dc App
Sayori(arwen02)2022-01-02 16:06
제일 기초적인게 오래걸리는 일 a,b를 나눠
a를 서브 스레드 에 시키고
메인스레드는 b를 처리한담 서브스레드 종료를 기다리기
당연히 a,b 서로 영향이 없는게 좋고, 있으면 잠금최소로 쓰고, 변수단순하게 하나면 interlock 쓰고
우물안개구리(lastpenguin)2022-01-02 16:09
더편하게 가려면 omp 이런거
우물안개구리(lastpenguin)2022-01-02 16:10
코드 흐름보다 데이터 설계부터 신경 많이 써줘야함.
데이터 캐시라인정렬도 그렇고
우물안개구리(lastpenguin)2022-01-02 16:11
1. 뮤텍스 락/언락 한 쌍의 실행속도는 일반 무한루프보다 5.5배 정도 느림. (하드웨어마다 다를 수 있음) 즉 그냥 아무 생각없이 쓰는 것 만으로도 성능 저하가 심함.
2. 스레드의 실행을 제어해서 데드락 해결하려고 하는거면 의미없음. 데드락이 생기는 주요 원인은 프로그램의 논리 문제이지 뮤텍스나 스케줄러가 운이 없게 스레드를 방해해서 생기진 않음.
토끼주문(icyselec)2022-01-02 16:12
뭐 일단 퍼포먼스 체크를 할 수 있는 도구를 이용해서 뭐든 써봐야지
익명(49.165)2022-01-02 16:34
답글
내 경험상 멀티스레드 버그는 디버거 같은걸로는 안잡아줌
토끼주문(icyselec)2022-01-02 16:36
락 거는 이유가 한번에 한 스레드만 실행되도록 강제해서 data race를 피하는게 목적인데 그걸 실행내내 걸어두면 여러 스레드가 동시에 실행되는 지점이 없잖아 그러면 스레드 여러개 만드는 의미가 없지
익명(223.62)2022-01-02 17:00
답글
lock granularity를 크게 잡으면 코딩은 편한데 성능향상이 미미하거나 오히려 느려지고 작게 잡으면 동시에 실행되는 스레드 개수는 늘어나는데 코딩할때 힘들어지고 너무 과하면 동시에 실행되는 대부분의 시간을 락 걸고 푸는데만 사용하겠지
익명(223.62)2022-01-02 17:03
그래서 만드는 프로그램이 뭐야? 이야기좀 들어보자. 프로그램을 만드는게 아니고 궁금해서 그러는 거라면 작업 시작 부분에 락걸고 끝나면 락 푼다는게 사실상 싱글스레드로 동작시키겠다는거랑 다를게 뭐야?
토끼주문(icyselec)2022-01-02 17:06
답글
동기화를 막자가 목표였지 싱글스레드를 써야지는 아니였지;;
dd(121.166)2022-01-02 17:07
답글
동기화를 시키는데 굳이 뮤텍스를 사용해야 하는 이유가 뭐야? 그런 용도로는 조건변수나 더 좋은 대안들이 많아. 작업 부분에만 임계 구역을 설정하고 스레드 하나씩 들여보내면 말 그대로 스레드가 여러개가 생성되서 멀티스레드이긴 한데 Python의 GIL처럼 그중에서 하나의 스레드만 실제로 작동하게됨.
토끼주문(icyselec)2022-01-02 17:12
답글
뮤텍스를 사용하는 가장 중요한 목적은 임계 구역의 제어를 위한 것이고 한 번에 한 놈만 실행시키는 것은 동기화의 개념도 아닐뿐더러 임계 구역 제어를 위한 좋은 방법도 아니야.
토끼주문(icyselec)2022-01-02 17:15
코루틴 켜라
익명(223.38)2022-01-02 17:24
답글
cpp임 ㅠㅠ
익명(117.111)2022-01-02 17:35
답글
C++20코루틴 추가됨 - dc App
Sayori(arwen02)2022-01-02 17:56
작성자가 하고 싶은게 뭔지는 모르겠는데 스레드에서 임계영역 항상 건드리면, 락걸필요 없이 메인스레드에서 임계영역 엑세스 하는 부분 바로 전에, 스레드 종료 기다림 될거 같은데? winapi 기준으러 waitfor...object에 스레드 핸들 넣어도 됨
우물안개구리(lastpenguin)2022-01-02 17:36
답글
그럼 거기서 스레드 끝나는거 대기함
우물안개구리(lastpenguin)2022-01-02 17:37
실제로 그런 컨셉으로 짠 코드 보여주고 이 코드의 ㅂㅅ같은 점을 찾아보라고 옛날 회사중에 하나의 면접에서 물어봤던거같음 - dc App
왜요;;;
그러면 실질적으로 멀티가 아닌데 - dc App
오히려 오버헤드 걸릴 걸? - dc App
아 락 심하게 거는것도 나쁘구나..
그러면 어짜피 스레드가 순차적으로 실행되잖아 - dc App
싱글이랑 차이가 없겠지 - dc App
임계영역을 쪼개고 필요한건 묶고 그것부터
싱글보다 느린 멀티가 되는거지.. 실질적으로 병렬 계산이 없을테니.. 쓰레드 띄우는 값만 더 들어간셈..
내 말이 그 말 - dc App
제일 기초적인게 오래걸리는 일 a,b를 나눠 a를 서브 스레드 에 시키고 메인스레드는 b를 처리한담 서브스레드 종료를 기다리기 당연히 a,b 서로 영향이 없는게 좋고, 있으면 잠금최소로 쓰고, 변수단순하게 하나면 interlock 쓰고
더편하게 가려면 omp 이런거
코드 흐름보다 데이터 설계부터 신경 많이 써줘야함. 데이터 캐시라인정렬도 그렇고
1. 뮤텍스 락/언락 한 쌍의 실행속도는 일반 무한루프보다 5.5배 정도 느림. (하드웨어마다 다를 수 있음) 즉 그냥 아무 생각없이 쓰는 것 만으로도 성능 저하가 심함. 2. 스레드의 실행을 제어해서 데드락 해결하려고 하는거면 의미없음. 데드락이 생기는 주요 원인은 프로그램의 논리 문제이지 뮤텍스나 스케줄러가 운이 없게 스레드를 방해해서 생기진 않음.
뭐 일단 퍼포먼스 체크를 할 수 있는 도구를 이용해서 뭐든 써봐야지
내 경험상 멀티스레드 버그는 디버거 같은걸로는 안잡아줌
락 거는 이유가 한번에 한 스레드만 실행되도록 강제해서 data race를 피하는게 목적인데 그걸 실행내내 걸어두면 여러 스레드가 동시에 실행되는 지점이 없잖아 그러면 스레드 여러개 만드는 의미가 없지
lock granularity를 크게 잡으면 코딩은 편한데 성능향상이 미미하거나 오히려 느려지고 작게 잡으면 동시에 실행되는 스레드 개수는 늘어나는데 코딩할때 힘들어지고 너무 과하면 동시에 실행되는 대부분의 시간을 락 걸고 푸는데만 사용하겠지
그래서 만드는 프로그램이 뭐야? 이야기좀 들어보자. 프로그램을 만드는게 아니고 궁금해서 그러는 거라면 작업 시작 부분에 락걸고 끝나면 락 푼다는게 사실상 싱글스레드로 동작시키겠다는거랑 다를게 뭐야?
동기화를 막자가 목표였지 싱글스레드를 써야지는 아니였지;;
동기화를 시키는데 굳이 뮤텍스를 사용해야 하는 이유가 뭐야? 그런 용도로는 조건변수나 더 좋은 대안들이 많아. 작업 부분에만 임계 구역을 설정하고 스레드 하나씩 들여보내면 말 그대로 스레드가 여러개가 생성되서 멀티스레드이긴 한데 Python의 GIL처럼 그중에서 하나의 스레드만 실제로 작동하게됨.
뮤텍스를 사용하는 가장 중요한 목적은 임계 구역의 제어를 위한 것이고 한 번에 한 놈만 실행시키는 것은 동기화의 개념도 아닐뿐더러 임계 구역 제어를 위한 좋은 방법도 아니야.
코루틴 켜라
cpp임 ㅠㅠ
C++20코루틴 추가됨 - dc App
작성자가 하고 싶은게 뭔지는 모르겠는데 스레드에서 임계영역 항상 건드리면, 락걸필요 없이 메인스레드에서 임계영역 엑세스 하는 부분 바로 전에, 스레드 종료 기다림 될거 같은데? winapi 기준으러 waitfor...object에 스레드 핸들 넣어도 됨
그럼 거기서 스레드 끝나는거 대기함
실제로 그런 컨셉으로 짠 코드 보여주고 이 코드의 ㅂㅅ같은 점을 찾아보라고 옛날 회사중에 하나의 면접에서 물어봤던거같음 - dc App