hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
오랑치메깅 뭉흐에르덴
오랑치메깅 뭉흐에르덴(몽골어: Уранчимэгийн Мөнх-Эрдэнэ, 1982년 3월 22일~)은 몽골의 권투 선수이다. 올림픽에 3회 참가하여 2012년 하계 올림픽에서 남자 라이트웰터급 동메달을 획득했다. 또한 세계 선수권 대회에서 동메달 2개, 아시안 게임에서 은메달 1개, 아시아 선수권 대회에서 금메달 1개, 은메달 1개, 동메달 1개를 획득했다.
존 설리번 (오클라호마의 정치인)
존 알프레드 설리번(John Alfred Sullivan, 1965년 1월 1일 ~ )는 미국의 정치인이다.
손노육
손노육(孫魯育)은 삼국 시대 오나라 정권의 공주로, 손권과 보연사의 둘째 딸이다. 오경제 손휴의 이복 누나이자 장모이기도 하다. 주거와 유찬(劉纂)의 부인이며 전남편 주거와의 사이에서 주황후를 낳았다.
가나쿠보 사이
가나쿠보 사이(일본어: 金久保 彩 (かなくぼ さい), 1989년 1월 11일~)는 일본의 축구 선수이다.
가나쿠보 사이 구단 경력
그는 2011년 J2리그의 미토 홀리호크에 입단했다. 2013년 V-파렌 나가사키로 이적했다. 2014년까지 43경기에 출전하여, 7득점을 넣었다. 2015년 J3리그의 AC 나가노 파르세이루로 이적했다. 2016년 7월 가고시마 유나이티드 FC로 이적했다. 2017년부터 2019년까지 일본 풋볼 리그의 가고시마 유나이티드 FC와 나라 클럽에서 뛰었다.
오쿠무라 하루
오쿠무라 하루(일본어: 奥村 春), 괴도단 코드네임 누아르(Noir)는 2016년 비디오 게임인 《페르소나 5》의 주요 등장인물 중 한 명이다. 하루는 게임 내 등장하는 마음의 괴도단 일원이며, 무인판 기준 괴도단 중 가장 마지막으로 합류한 멤버이다.
하루는 소에지마 시게노리가 "달콤하고 수줍음이 많은" 캐릭터로 창조되었으며, 부유한 가정에서 자라 아버지의 방식을 바꾸려 하고 학대적인 약혼자와의 결혼을 피하려는 인물로 설정되었다. 《페르소나 5 스크램블》, 《페르소나 5 더 로열》, 《페르소나 5 택티카》 등 같은 시리즈의 다른 게임에도 등장했다.
하루는 전반적으로 긍정적인 평가를 받았지만, 주연 캐릭터 인기 투표에서는 낮은 순위를 기록했는데 이는 플레이어가 볼 수 있는 시간이 상대적으로 적었기 때문으로 분석된다. 페르소나 5 스크램블에서의 등장은 더 좋은 평가를 받았으며, 루크 플런켓과 같은 비평가는 페르소나 5 본편에 비해 설정이 크게 개선되었다고 평했다. 페르소나 5 더 로열에서 비중이 확대된 이후로는 원작 게임에서의 모습보다 더 좋은 평가를 받고 있다.
오쿠무라 하루 구상과 창작
오쿠무라 하루는 2016년 비디오 게임인 페르소나 5에 등장하는, 소에지마 시게노리가 디자인한 여성 청소년 캐릭터이다. 하루는 슈진 고등학교 3학년 학생이자 아버지인 오쿠무라의 사업과 재산을 상속받을 사람이다. 슈진 고등학교에서 하루와 다른 학생은 페르소나라는 초자연적인 힘에 각성하고 마음의 괴도단의 일원이 된다. 이 팀은 인간 욕망이 발현된 가상 공간인 팰리스에서 부도덕하거나 범죄적인 대상의 마음 속으로 가 개심시킨다. 이 팰리스는 특히 강하게 왜곡된 욕망을 가진 사람들에게 나타난다. 각 멤버는 어느 시점에 반항의 욕망에 대한 반응으로 형성되는 존재인 페르소나에 각성하며, 이를 나타내는 괴도 의상을 얻고 괴도단의 코드네임을 서로 붙인다. 하루의 경우 코드네임으로 누아르를 선택했다. 게임 아티스트 아카네 고바야시는 하루의 단발머리가 좋아 가장 좋아하는 캐릭터 중 한 명으로 꼽았다. 하루는 부유한 가정에서 자라 아버지에게 순종적이었던 "달콤하고 수줍음이 많은" 캐릭터이다. 하루는 처음에는 다른 세상에 사는 듯한 느낌을 주어 주인공과는 멀리 떨어져 있는 것처럼 보이지만, 나머지 동료들과 가까워질수록 더 친근해지도록 디자인되었다. 원래 플레이 가능한 캐릭터로 토고 히후미가 계획되었으나, 마코토로 교체되어 보조 캐릭터가 되었고, 성인에게 통제받는 캐릭터라는 한 측면이 하루의 캐릭터에 합쳐졌다. 하루는 조커를 사랑하는 것으로 공식적으로 알려진 유일한 괴도단 멤버이다.
오쿠무라 하루 구상과 창작
하루는 밀레디라는 페르소나를 가지고 있으며, 이 페르소나는 결국 각성하여 아스타르테가 된다. 디자이너는 하루의 페르소나가 하루의 성격이 변화하는 것처럼 인공적인 것에서 유기적인 것으로 변모하는 과정을 강조하고 싶었다고 밝혔다. 또한 하루와 그 페르소나가 마코토와 그 페르소나와의 유사성을 지니고 있음을 반영했는데, 비슷한 학년과 성별, 자신의 삶을 통제하러는 성인이 있고 아버지가 없다는 점을 들어 페르소나가 비슷한 뿌리에서 비롯되었다고 말했다.
페르소나 5 댄싱 스타 나이트에서 하루의 방을 디자인하는 것은 미술 디자이너 시마다 아즈사에게 어려웠다. 아즈사는 하루가 아버지에게 통제받는 보호받는 삶을 살았음을 반영하기 위해 의도적으로 하루의 취미나 성격을 드러내는 요소를 피했다고 말했다. 댄싱 스타 나이트의 안무가이자 시나리오 작가인 고바야시 텟페이는 하루가 다른 대부분의 캐릭터처럼 스트리트 스타일에 잘 맞지 않을 것이라고 느꼈다. 그는 하루의 디자인에 발레 코르셋을 입은 의상에 고딕 스타일을 선택했는데, 그는 이 디자인이 가장 마음에 든다고 생각하며 만족했다.
오쿠무라 하루 구상과 창작
댄싱 스타 나이트에서 하루의 춤은 모션 액터 댄서 스마일 사키가 연기했다. 고바야시는 사키가 발레 춤을 추는 것을 보고 그녀를 이 게임에 섭외했고, 그녀는 수락했다. 당시 사키는 자신의 발레 실력에 대해 불편함을 느꼈기 때문에 레슨을 받고 안무를 연습했지만, 발레 강조가 너무 강하다는 지적을 받았다. 사키는 일반인들이 좋아할 만한 발레를 하고, 발레 규칙에 너무 얽매이지 말라는 요청을 받았다. 이는 오랫동안 발레를 해왔기에 규칙이 몸에 밴 사키에게는 어려운 일이었다. 고바야시는 너무 아름다운 춤에만 집중하면 하루의 개성을 잃을 수 있다고 설명했다.
오쿠무라 하루 구상과 창작
하루의 일본어 성우는 토마츠 하루카이며, 영어 성우는 잰시 후인이다. 후인은 역할이 주어졌을 때, 자신이 어떤 캐릭터를 맡게 될지, 어떤 게임에서 작업하게 될지 구체적으로 알지 못한 채 비디오 게임 캐릭터를 연기하게 될 것이라는 말만 들었다. 기밀유지 협약에 서명한 후에야 자신이 페르소나 5에서 작업하게 될 것임을 알았다. 성우가 이 역할을 오디션 보지 않았다는 점에서 이는 하루카에게는 이례적인 일이었다. 그 후 하루카는 하루에 대한 설명과 그녀의 이미지를 받았다. 하루를 연기할 때 후인이 유일하게 까다롭다고 느낀 점은 "특정 제약을 넘어서는 것"이었는데, 캐릭터를 벗어나더라도 여전히 하루라는 캐릭터 안에서 정당화될 수 있도록 균형을 맞추는 것이었다. 녹음 과정은 1년 넘게 진행되었고, 후인은 이를 대부분의 애니메이션 프로젝트보다 훨씬 길다고 생각했다. 하루카는 이 역할을 자신의 가장 잘 알려진 역할 중 하나로 여겼다. 하루카는 페르소나 5의 애니메이션 각색작인 페르소나 5: 디 애니메이션에서 다시 한번 목소리 연기를 맡았다.
오쿠무라 하루 등장
하루는 2016년 페르소나 5의 주요 등장인물 중 한 명으로 처음 등장했으며, 이세계의 팰리스라는 형이상학적인 공간에서 사람들의 보물을 훔쳐 마음을 바꿀 수 있는 능력을 가진 집단인 마음의 괴도단에 합류한다. 하루는 괴도단에 가장 마지막으로 합류한 멤버이다. 하루는 나중에 페르소나 5의 새로운 버전인 페르소나 5 더 로열에도 등장했는데, 확장판에서는 하루와 다른 캐릭터를 포함한 새로운 콘텐츠가 추가되었고, 스토리 초반에 더 빨리 소개된다. 모르가나가 류지와의 불화로 괴도단을 떠난 후, 모르가나는 혼자서 하루의 아버지인 오쿠무라 쿠니카즈의 팰리스에서 보물을 훔치려 시도하고, 결국 하루가 아버지의 팰리스(이세계 안에 있는 왜곡된 세상의 반영)에 나타나자 하루의 도움을 받아들인다. 이 기간 동안 하루는 자신의 페르소나인 밀레디에 각성하고 누아르라는 별명을 얻는다. 하루는 결국 아버지의 마음을 바꾸는 데 성공하지만, 자신과 다른 괴도단이 모르는 사이에 아버지는 살해된다. 그녀는 다른 사람들을 더 많은 임무에서 돕고, 결국 진정한 악당인 얄다바오트를 물리치는 데 성공한다.
오쿠무라 하루 등장
하루는 페르소나 5 더 로열, 페르소나 5 댄싱 스타 나이트, 페르소나 5 스크램블, 페르소나 5 택티카를 포함한 페르소나 5 시리즈의 다른 게임에도 등장한다.
하루는 《페르소나 Q2 뉴 시네마 래버린스》에서 플레이 가능한 캐릭터로 등장하며, 첫 번째 보스인 카모시다맨을 물리친 후 잠금 해제된다.
하루는 《슈퍼 스매시브라더스 얼티밋》에서 스피릿으로 등장하며, 조커와 함께 파이터스 패스 DLC로 출시되었다.
오쿠무라 하루 홍보 및 평가
오쿠무라 하루는 페르소나 5에 등장한 이후로 여러 가지 상품이 출시되었다. 양초 회사 Wick & Skull은 아틀라스 및 세가와의 협력으로 프리지아, 라일락, 복숭아 향이 나는 하루 테마 양초를 제작했다.
오쿠무라 하루 홍보 및 평가
하루는 대체적으로 좋은 평가를 받았다. 그럼에도 하루는 플레이 가능한 페르소나 5 캐릭터 인기 투표에서 가장 낮은 순위를 기록했는데, Rock, Paper, Shotgun의 작가 칸 세린은 하루가 다른 캐릭터들에 비해 플레이어들에게 자신을 알릴 시간이 적었기 때문이라고 분석했다. 디 A.V. 클럽의 작가 클레이턴 퍼덤은 페르소나 5가 너무 길다고 비판하면서도 하루의 이야기는 "전적으로 불필요하다"고 느꼈다고 말했다. Kotaku의 작가 루크 플런켓 역시 하루가 불필요하다고 느꼈는데, 하루의 이야기가 비극적이지만, 그 스토리와 하루의 성격은 "니트웨어에 정말 관심 있는" 사람들 외에는 누구에게도 흥미를 끌지 못한다고 말했다. 플런켓은 처음에는 하루에게 관심이 없었지만, 페르소나 5의 "후반부 노가다"에서 벗어나 페르소나 5 스크램블에서 하루가 훨씬 개선되어 가장 좋아하는 캐릭터 중 한 명이 되었다고 느꼈다고 말했다. 플런켓에게는 하루의 경험이 경찰을 싫어하게 만들었다는 점도 매력적이었다고 덧붙였다. 더 게이머의 작가 스테이시 헨리는 경찰을 비판하는 하루의 대사가 시리즈에서 가장 기억에 남는 대사라고 언급했다. 같은 더 게이머의 작가 시안 메이어 역시 페르소나 5 스크램블 덕분에 하루를 더 좋아하게 되었다고 말하며, 하루가 "빠르고, 재치 있고, 정말 웃기다"면서도 따뜻한 성격을 가지고 있다고 평했다. 그는 하루가 다른 사람들을 기쁘게 하려던 태도에서 벗어나면서 경찰에 대해 더욱 비판적인 태도를 보이게 되었다고 추측했다.
오쿠무라 하루 홍보 및 평가
더 메리 수의 작가 매들린 카르푸는 게임 속 다른 여성 캐릭터, 예를 들어 안의 행동에 대해 비판하며 안은 첫 번째 액트 이후 별다른 발전을 보이지 않는다고 말했다. 그녀는 처음에는 하루를 전형적인 "부드럽고 달콤하지만 몰래 살인적인" 소녀로 여겨 크게 신경 쓰지 않았지만, 점점 더 하루를 좋아하게 되었고, "놀랍도록 멋지다"고 생각하며 캐릭터적인 발전을 칭찬하고 안 대신 하루와 로맨스를 추구하지 않은 것을 후회했다고 말했다. 카르푸는 페르소나 5가 하루를 너무 늦게 게임에 등장시킨 것에 대해 좌절감을 느꼈다. IGN의 작가 이자툴 라잘리는 하루를 시리즈 최고의 여성 캐릭터 중 한 명으로 꼽으며, 그녀가 "독립성과 강인함"을 나타내고 "친절하고 사회적으로 서투른" 성격이 "사랑스럽게" 만든다고 말했다. 게임스팟의 작가 제스 하워드는 처음에는 페르소나 5에서 하루에게 큰 관심이 없었지만, 페르소나 5 택티카에서 더 좋아하게 되었다고 말했다.
오쿠무라 하루 홍보 및 평가
스테이시 헨리는 하루가 게임에서 과소평가된 연애 대상이라고 느끼며, 마코토와 안은 서로 보완적인 디자인으로 "명백한 선택"으로 자리 잡았다고 말했다. 안은 "금발에 아름답고 여성스럽고", 마코토는 "적극적이고 진취적인 태도"에 "소년 같은 생쥐 머리"를 가지고 있다는 것이다. 헨리는 하루가 훨씬 나중에 소개되어 플레이어가 이미 다른 이와의 연애 경로를 선택했을 가능성이 높기 때문에 기회를 놓쳤다고 느꼈다고 말했다. 또한 하루가 발견되는 장소인 채소밭이 너무 외져서 플레이어는 하루를 찾기 위해서만 그곳에 갈 것이고, 다른 캐릭터는 쉽게 찾을 수 있는 것과 다른 상황이라고 느꼈다. 그러나 헨리는 이것이 하루의 캐릭터에 잘 맞는다고 생각했으며, 하루의 의상과 몸짓이 "엄청나게 수줍은" 캐릭터임을 암시한다고 설명했다. 이 수줍음 때문에 하루와의 연애를 추구하기가 더 어려웠지만, 그만큼 보람이 있었다고 말했다.
오쿠무라 하루 홍보 및 평가
작가 멜리사 제인 루이스는 뱀 아키타입에 대해 논의했는데, 이 이야기는 "독실한 젊은 남성에게 남성과의 교류의 위험성을 경고하기 위한 이야기"에서 부정직한 남자에게 외면당한 여성에서 유래한다. 그녀는 하루가 이 아키타입과 유사한 주제를 가지고 있다고 언급하며, 하루가 처음에는 아버지에게 강제로 결혼을 강요받았지만, 괴도단이 하루를 구해주면서 "순종적이고 온순한" 모습에서 "자신감 있고" "다소 가학적인" 모습으로 변모하는 과정을 예로 들었다. 그녀는 하루와 뱀의 역할이 "약간 뒤바뀌었다"고 지적하며, 둘 다 남성에게 속고, 그들의 "슬픔과 분노"가 자신을 변모하게 만들 때 "일탈적인 행동"으로 꾸중을 듣는다고 말했다. 이는 성별 규범을 거스르고 더욱 단호하고 대담하며 성적으로 자유로운 면을 포용하는 것이라고 설명했다. 작가 마르틴 이반치치는 하루의 언어적 특징에 대해 논의하며, 하루의 대화가 공감 능력을 전달하고 그녀의 성장 배경을 반영하며, 비슷한 친절한 성격을 보이는 사람들을 칭찬하는 경향이 있는데 이는 하루가 진실한 사람임을 강조한다고 주장했다. 또한 하루의 대화가 자연과 공감에 대한 그녀의 즐거움을 통해 하루의 성격을 이해할 수 있도록 해준다고 논의했다. 하루와 안의 언어적 특징 사이의 유사점에 대해서도 논의했는데, 특히 안의 공감 능력 때문이었지만, 안이 하루의 격식 있는 대화와 대조되는 더 비격식적인 대화와 같은 몇 가지 면에서 다르다고 지적하며, 안의 성격이 하루와 류지의 혼합이라고 제안했다. 바이스의 작가 슬론 시는 게임이 진행될수록 페르소나 5가 아웃사이더로서의 출연진에 대한 이야기가 줄어든다고 느꼈다. 그들은 하루와 같은 캐릭터가 "이질적이고" "거부당한" 느낌을 받을 수 있지만, 그들의 "근본적인 특권과 안정적인 위치" 때문에 이러한 캐릭터가 고립이 무엇을 의미하는지 이해하기 어렵다고 지적했다.
극장판 귀멸의 칼날: 무한성편
《극장판 귀멸의 칼날: 무한성편》(일본어: 劇場版「鬼滅の刃」無限城編 영어: Demon Slayer: Infinity Castle)은 2025년 
7월 18일에 공개된 일본의 애니메이션 영화로, 고토게 코요하루의 만화 《귀멸의 칼날》의 극장판이다. 원작 귀멸의 칼날의 최종결전 부분인 최종 국면 편의 3부작 중 첫번째를 다루고 있다.
극장판 귀멸의 칼날: 무한성편 흥행 성적
2025년 8월 21일 기준, 예매판매량이 79만 장을 돌파하며 한국에서 예매판매량 5위를 기록했습니다. 개봉 첫 날 51만 7956명을 동원했으며, 이틀째에 누적 관객 수 100만 명을 돌파했습니다. 이는 2025년 개봉 영화 중이자 한국 영화 역사상 가장 빠르게 해당 기록을 달성한 일본 영화로, 기존 최단 기록을 세웠던 《스즈메의 문단속》(2022년, 개봉 6일)의 기록을 훨씬 앞당겼습니다. 개봉 후 3일 동안 총 164만 명의 관객을 동원하며 179억 6천만 원의 흥행 수익을 기록, 주말 박스오피스 1위를 차지했습니다.
존 애시크로프트
존 데이비드 애시크로프트(영어: John David Ashcroft, 1942년 5월 9일 ~ )는 미국의 변호사, 로비스트, 전 정치인이며, 조지 W. 부시 대통령 아래에서 2001년부터 2005년까지 제79대 미국 법무부 장관을 지냈다. 미주리주 출신의 공화당원인 애시크로프트는 1995년부터 2001년까지 미국 상원에서 미주리를 대표했으며, 이전에는 미주리주 제29대 감사관 (1973년~1975년), 제38대 법무장관 (1976년~1985년), 제50대 주지사 (1985년~1993년)를 역임했다. 이후 그는 워싱턴 D.C.에 본사를 둔 로비 회사인 애시크로프트 그룹을 설립했다.
존 애시크로프트
애시크로프트는 1960년 힐크레스트 고등학교를 졸업한 후, 예일 대학교에서 문학사 학위를, 시카고 대학교 법학대학원에서 법무박사 학위를 받았다. 그는 연방 하원의원 선거에 출마했으나 낙선한 뒤, 1974년 미주리주 감사관에 선출되었다. 이후 미주리주 법무장관으로 두 차례 연속 임기를 지냈고, 미주리주 주지사로도 두 차례 연속 재임하며 공화당 후보로는 주 역사상 처음으로 이러한 기록을 세웠다. 그는 현재까지 두 번의 연속 임기를 모두 마친 유일한 미주리주 공화당 주지사이다. 또한 1995년부터 2001년까지 미주리를 대표하는 연방 상원의원을 한 차례 지냈으며, 2000년 재선 도전에서 낙선했다. 애시크로프트는 미주리 주정부에서 초기 임명직을 거쳤고, 존 댄포스의 지도 아래 정치적 성장을 이루었다. 그는 정치와 윤리에 관한 여러 권의 저서를 집필하기도 했다.
2000년 조지 W. 부시가 대통령에 당선된 후, 그는 애시크로프트를 미국 법무부 장관으로 지명했다. 법무장관 재직 시절, 애시크로프트는 9·11 테러 이후 제정된 미국 애국자법의 핵심 지지자였으며, 테러 용의자에 대한 고문 사용을 옹호한 인물로 알려져 있다. 그는 2005년 2월, 법무장관직에서 물러났으며, 앨버토 곤잘러스가 후임으로 임명되었다. 2011년부터 애시크로프트는 민간군사기업 아카데미 (구 블랙워터)의 이사회 구성원으로 활동하고 있으며, 보수적 기독교 성향의 리젠트 대학교 로스쿨에서 교수로 재직 중이다. 이 학교는 생전에 텔레복음 설교자로 활동했던 팻 로버트슨과 연관되어 있다. 그는 또한 연방주의자협회의 회원이기도 했다. 그의 아들 제이 애시크로프트 역시 정치인으로, 2017년부터 2025년까지 미주리주 국무장관을 지냈으며, 2024년 주지사 선거에 출마했으나 낙선했다.
존 애시크로프트 법무부 장관
2000년 12월, 상원의원 선거에서 패배한 후 애시크로프트는 조지 W. 부시 대통령 당선인에 의해 미국 법무부 장관으로 지명되었다. 그는 상원 표결에서 58대 42로 인준을 받았으며, 다수의 민주당 상원의원들이 그가 과거에 학교 인종 통합을 위한 스쿨버스 운행에 반대한 점과 낙태에 대한 반대 입장을 이유로 그의 지명에 반대하였다. 지명 당시, 그는 연방주의자협회의 회원으로 알려져 있었다.
2001년 5월, FBI는 오클라호마시티 폭탄 테러 수사와 관련된 수천 건의 문서를 분실했다고 발표하였다. 이에 따라 애시크로프트는 해당 테러로 사형 선고를 받은 티머시 맥베이의 형 집행을 30일간 유예하였다.
존 애시크로프트 법무부 장관
2001년 7월부터 애시크로프트는 전용기를 이용한 항공 이동만을 하게 되었다. 이에 대한 질문이 제기되자 법무부는 FBI가 실시한 "위협 평가"에 따른 조치였다고 설명하였다. 그러나 FBI와 법무부는 구체적인 위협의 내용, 위협을 제기한 인물, 그리고 발생 시점 등에 대해서는 밝히지 않았다. CIA 또한 내각 구성원에 대한 구체적인 위협을 인지하고 있지 않았다고 밝혔다. 당시 애시크로프트는 내무부 및 에너지부 장관 (각 부처의 임무상 전용기 이용이 필요한 경우)을 제외하고 전용기를 이용한 유일한 내각 구성원이었다.
김재병 개요
김재병(1968년 ~ )은 대한민국의 소방공무원이다. 2025년 3월 12일 제22대 경기도 소방재난본부 본부장으로 취임하였다.
김재병 생애
김재병은 1997년 제9기 소방간부후보생으로 임용되어 공직을 시작했다. 이후 종로소방서, 마포소방서 서장을 지냈으며, 이어 중앙소방학교 인재개발과장, 서울소방학교장, 소방청 기획재정담당관·대응총괄과장, 행정안전부 소방정책관 등을 역임했다. 그 후 경상남도 소방본부 본부장을 거쳐 경기도 본부장으로 취임했다.
김재병 활동
2025년 3월 12일 취임 후 김 본부장은 “안전한 경기, 도민이 행복한 경기 실현”이라는 비전을 제시하며 공식 업무를 시작했다.
2025년 5월 21일에는 평택 공군작전사령부 및 오산 공군기지 소방대를 방문하여 군·소방 간 협력체계를 점검하고, 대형 재난 대응을 강화할 계획을 밝혔다.
2025년 5월 19일에는 안산 풍도를 방문해 지역 의용소방대원들을 격려하고 훈련을 점검했다.
2025년 6월, 김 본부장은 도내 5년간 초중고 화재 174건 발생 사실을 밝히며 “아이들이 안심하고 배울 수 있는 학교 환경을 만드는 것은 우리 모두의 책임”이라고 강조했다.
콜초너이 에르뇌
콜초너이 에르뇌(프랑스어: Kolczonay Ernő, 1953년 5월 15일~2009년 10월 3일)는 헝가리의 전 펜싱 선수, 지도자로 주 종목은 에페이다. 1980년 하계 올림픽에서 남자 에페 개인전과 1992년 하계 올림픽 남자 에페 단체전 은메달을 획득했으며 세계 선수권 대회에서 금메달 1개, 은메달 1개, 동메달 3개를 획득했다.
필리프 리부
필리프 리부(프랑스어: Philippe Riboud, 1957년 4월 9일~)는 프랑스의 전직 펜싱 선수로 주 종목은 에페이다. 올림픽에 4회 참가하여 금메달 2개, 은메달 1개, 동메달 2개를 획득했고 1980년과 1988년 하계 올림픽 남자 에페 단체전 금메달과 1984년 하계 올림픽 남자 에페 단체전 은메달, 1988년 하계 올림픽 남자 에페 개인전 은메달,1980년,  1984년 하계 올림픽 남자 에페 개인전 동메달을 획득했다. 또한 세계 선수권 대회에서 금메달 3개와 동메달 3개, 동메달 2개를 획득했다.
프로세서 선호도
컴퓨터 과학에서 프로세서 선호도(processor affinity)는 CPU 피닝(CPU pinning) 또는 캐시 선호도(cache affinity)라고도 불리며, 프로세스 또는 스레드를 특정 CPU 또는 CPU 범위에 바인딩(binding) 및 언바인딩(unbinding)하여, 해당 프로세스 또는 스레드가 다른 어떤 CPU가 아닌 지정된 CPU에서만 실행되도록 하는 기능이다. 이는 대칭형 다중 처리 운영 체제의 기본 중앙 큐 스케줄링 알고리즘을 수정한 것으로 볼 수 있다. 큐의 각 항목에는 관련 프로세서를 나타내는 태그가 있다. 자원 할당 시 각 작업은 다른 프로세서보다 관련 프로세서에 우선적으로 할당된다.
프로세서 선호도
프로세서 선호도는 특정 프로세서에서 실행되었던 프로세스의 잔여물(예: CPU 캐시의 데이터)이 다른 프로세서가 실행된 후에도 해당 프로세서의 상태에 남아 있을 수 있다는 사실을 활용한다. 인터럽트가 적은 CPU 집약적 프로세스를 동일한 프로세서에서 실행하도록 스케줄링하면 캐시 미스와 같은 성능 저하 이벤트를 줄여 성능을 향상시킬 수 있지만, 일반 프로그램은 해당 CPU가 다시 사용 가능해질 때까지 기다려야 하므로 속도가 느려질 수 있다. 프로세서 선호도의 실용적인 예는 일부 그래픽 렌더링 소프트웨어와 같이 스레드를 사용하지 않는 애플리케이션의 여러 인스턴스를 실행하는 것이다.
스케줄링 알고리즘 구현은 프로세서 선호도에 대한 준수 여부가 다양하다. 특정 상황에서 일부 구현은 효율성이 높아진다면 작업이 다른 프로세서로 변경되는 것을 허용한다. 예를 들어, 두 개의 프로세서 집약적 작업(A와 B)이 하나의 프로세서에 선호도를 가지고 있고 다른 프로세서가 사용되지 않는 경우, 많은 스케줄러는 프로세서 사용을 극대화하기 위해 작업 B를 두 번째 프로세서로 옮길 것이다. 그러면 작업 B는 두 번째 프로세서에 대한 선호도를 얻게 되고, 작업 A는 원래 프로세서에 대한 선호도를 계속 유지하게 된다.
프로세서 선호도 사용법
프로세서 선호도는 캐시 문제를 효과적으로 줄일 수 있지만, 지속적인 부하분산 문제를 줄이지는 못한다. 또한 비균일 아키텍처를 가진 시스템에서는 프로세서 선호도가 더 복잡해진다는 점을 명심해야 한다. 예를 들어, 두 개의 듀얼 코어 하이퍼스레드 CPU를 가진 시스템은 스케줄링 알고리즘에 어려움을 준다.
프로세서 선호도 사용법
하이퍼스레딩을 통해 동일한 코어에 구현된 두 가상 CPU 사이에는 완전한 선호도가 존재하고, 동일한 물리적 프로세서 내의 두 코어 사이에는 부분적인 선호도(코어들이 일부 캐시를 공유하지만 전부는 아님)가 존재하며, 별개의 물리적 프로세서 사이에는 선호도가 존재하지 않는다. 다른 자원들도 공유되기 때문에 프로세서 선호도만으로 CPU 디스패치의 근거로 사용될 수는 없다. 만약 프로세스가 주어진 코어 내의 한 가상 하이퍼스레드 CPU에서 최근에 실행되었고, 그 가상 CPU가 현재 사용 중이지만 그 파트너 CPU가 사용 가능할 경우, 캐시 선호도는 해당 프로세스가 유휴 파트너 CPU로 디스패치되어야 한다고 제안할 것이다. 그러나 두 가상 CPU는 사실상 모든 컴퓨팅, 캐시, 메모리 자원을 놓고 경쟁한다. 이러한 상황에서는 사용 가능한 다른 코어나 CPU로 프로세스를 디스패치하는 것이 일반적으로 더 효율적일 수 있다. 이 경우 프로세스가 캐시를 다시 채울 때 페널티가 발생할 수 있지만, 프로세스가 CPU 내에서 자원 경쟁을 할 필요가 없으므로 전반적인 성능은 더 높아질 수 있다.
프로세서 선호도 특정 운영 체제
리눅스에서는 taskset(1) 프로그램과 sched_setaffinity(2) 시스템 호출을 사용하여 프로세스의 CPU 선호도를 변경할 수 있다. 스레드의 선호도는 pthread_setaffinity_np(3) 또는 pthread_attr_setaffinity_np(3) 라이브러리 함수 중 하나를 사용하여 변경할 수 있다.
SGI 시스템에서 dplace는 프로세스를 CPU 세트에 바인딩한다.
프로세서 선호도 특정 운영 체제
DragonFly BSD 1.9 (2007년) 및 이후 버전에서는 usched_set 시스템 호출을 사용하여 프로세스의 선호도를 제어할 수 있다. NetBSD 5.0, FreeBSD 7.2, DragonFly BSD 4.7 및 이후 버전에서는 pthread_setaffinity_np와 pthread_getaffinity_np를 사용할 수 있다. NetBSD에서는 psrset 유틸리티를 사용하여 스레드의 선호도를 특정 CPU 세트로 설정한다. FreeBSD에서는 cpuset 유틸리티를 사용하여 CPU 세트를 생성하고 프로세스를 이 세트에 할당한다. DragonFly BSD 3.1 (2012년) 및 이후 버전에서는 usched 유틸리티를 사용하여 프로세스를 특정 CPU 세트에 할당할 수 있다.
윈도우 NT 및 그 후속 버전에서는 SetThreadAffinityMask 및 SetProcessAffinityMask API 호출 또는 작업 관리자 인터페이스(프로세스 선호도에만 해당)를 통해 스레드 및 프로세스 CPU 선호도를 개별적으로 설정할 수 있다.
MacOS는 선호도 API를 노출하여 커널에 선호도 세트에 따라 스레드를 스케줄링하는 방법에 대한 힌트를 제공한다.
솔라리스에서는 pbind(1) 프로그램을 사용하여 프로세스 및 LWP의 프로세서 바인딩을 제어할 수 있다. 프로그래밍 방식으로 선호도를 제어하려면 processor_bind(2)를 사용할 수 있다. 프로세서 세트 및 지역성 그룹 개념을 사용하는 pset_bind(2) 또는 lgrp_affinity_get(3LGRP)와 같은 더 일반적인 인터페이스도 있다.
AIX에서는 bindprocessor 명령과 bindprocessor API를 사용하여 프로세스 바인딩을 제어할 수 있다.
GNU Portable Threads
GNU Pth(Portable Threads)는 POSIX/ANSI-C 기반의 유닉스 플랫폼용 사용자 공간 스레드 라이브러리로, 멀티스레딩 애플리케이션을 위한 우선순위 기반 스케줄링을 제공한다. GNU Pth는 높은 수준의 이식성을 목표로 한다. 이는 GNU 프로젝트의 일부이다.
Pth는 또한 하위 호환성을 위해 POSIX 스레드에 대한 API 에뮬레이션을 제공한다.
GNU Pth는 커널 공간 스레드에 대한 N:1 매핑을 사용한다. 즉, 스케줄링은 전적으로 GNU Pth 라이브러리에 의해 이루어지며 커널 자체는 사용자 공간의 N개 스레드를 인식하지 못한다. 이 때문에 커널 디스패칭이 필요하기 때문에 SMP를 활용할 수 없다.
그린 스레드
컴퓨터 프로그래밍에서 그린 스레드(Green thread)는 기반이 되는 운영체제 (OS)에 의해 기본적으로 스케줄링되지 않고, 런타임 라이브러리 또는 가상 머신 (VM)에 의해 스케줄링되는 스레드이다. 그린 스레드는 네이티브 OS 기능에 의존하지 않고 다중 스레드 환경을 에뮬레이트하며, 커널 공간 대신 사용자 공간에서 관리되어 네이티브 스레드 지원이 없는 환경에서도 작동할 수 있다.
그린 스레드 어원
그린 스레드는 자바 프로그래밍 언어의 원래 스레드 라이브러리 이름(버전 1.1에 출시되었고 버전 1.3에서는 네이티브 스레드로 전환되면서 폐기됨)에서 유래했다. 이 라이브러리는 썬 마이크로시스템즈의 그린 팀(The Green Team)에서 설계했다.
그린 스레드 역사
그린 스레드는 1997년부터 2000년 사이에 자바에서 잠시 사용되었다.
그린 스레드는 협력적 동시성을 통해 단일 운영체제 스레드를 공유하므로, 운영체제 스레드처럼 병렬 처리 성능 향상을 달성할 수 없다. 코루틴과 그린 스레드의 주요 이점은 구현의 용이성이다.
그린 스레드 성능
멀티 코어 프로세서에서는 네이티브 스레드 구현이 여러 프로세서에 작업을 자동으로 할당할 수 있는 반면, 그린 스레드 구현은 일반적으로 그렇지 못하다. 일부 VM에서는 그린 스레드를 훨씬 빠르게 시작할 수 있다. 그러나 단일 프로세서 컴퓨터에서는 가장 효율적인 모델이 아직 명확하게 결정되지 않았다.
리눅스 커널 버전 2.2(1999년 출시)를 실행하는 컴퓨터에서의 벤치마크는 다음을 보여주었다.
그린 스레드가 블로킹 시스템 호출을 실행하면 해당 스레드뿐만 아니라 프로세스 내의 모든 스레드가 블록된다. 이 문제를 피하려면 그린 스레드는 논블로킹 입출력 또는 비동기 입출력 작업을 사용해야 한다. 비록 사용자 측의 복잡성이 증가할 수 있지만, 그린 스레드를 구현하는 가상 머신이 각 I/O 작업에 대해 특정 I/O 프로세스(사용자에게 숨겨진)를 생성한다면 복잡성이 줄어들 수 있다.
네이티브 스레드 사용을 허용하고 스레드 활성화 및 동기화 오버헤드를 줄이는 메커니즘도 있다.
그린 스레드 자바 가상 머신의 그린 스레드
자바 1.1에서는 그린 스레드가 자바 가상 머신 (JVM)에서 사용되는 유일한 스레딩 모델이었다. 적어도 솔라리스에서는 그랬다. 그린 스레드는 네이티브 스레드에 비해 몇 가지 제한 사항이 있어, 이후 자바 버전에서는 네이티브 스레드 선호로 변경되었다.
예외는 저전력 장치용 운영체제와 자바 가상 머신의 혼합 형태인 Squawk 가상 머신이다. 이 가상 머신은 네이티브 코드 사용을 최소화하고 격리된 환경을 지원하기 위해 그린 스레드를 사용한다.
Kilim과 Quasar는 자바 컴파일러가 생성하는 자바 바이트코드를 수정하여 JVM의 최신 버전에서 그린 스레드를 구현하는 오픈 소스 프로젝트이다(Quasar는 코틀린과 클로저도 지원한다).
그린 스레드 다른 언어의 그린 스레드
네이티브 스레드 대신 그린 스레드와 동등한 것을 구현하는 다른 프로그래밍 언어들도 있다. 예시:
얼랭 가상 머신에는 그린 프로세스라고 불릴 만한 것이 있다. 이들은 운영체제 프로세스와 유사하지만(스레드처럼 상태를 공유하지 않는다) 얼랭 런타임 시스템(erts) 내에서 구현된다. 이들은 때때로 그린 스레드라고 불리지만, 표준 그린 스레드와는 상당한 차이가 있다.
GHC 하스켈의 경우, 구성 가능한 타임아웃 후 첫 번째 할당에서 컨텍스트 전환이 발생한다. GHC 스레드는 수명 동안 하나 이상의 OS 스레드에서 실행될 수도 있으며(GHC 스레드와 OS 스레드 간에는 다대다 관계가 있다), 이는 대칭형 다중 처리 머신에서 병렬 처리를 가능하게 하면서도 사용 가능한 코어 수에 필요한 것보다 더 많은 비용이 드는 OS 스레드를 생성하지 않는다.
그린 스레드 다른 언어의 그린 스레드
대부분의 스몰토크 가상 머신은 평가 단계를 세지 않지만, VM은 외부 신호(예: 타이머 만료 또는 I/O 사용 가능)에 따라 실행 중인 스레드를 선점할 수 있다. 일반적으로 라운드 로빈 스케줄링이 사용되어, 주기적으로 깨어나는 고우선순위 프로세스가 효과적으로 시분할 선점을 구현한다.
QKS 스몰토크와 같은 다른 구현은 항상 시분할 방식이다. 대부분의 그린 스레드 구현과 달리 QKS는 우선순위 역전 방지도 지원한다.
그린 스레드 자바 가상 머신의 가상 스레드와의 차이점
가상 스레드는 자바 19에서 미리보기 기능으로 도입되었고 자바 21에서 안정화되었다. 가상 스레드와 그린 스레드의 중요한 차이점은 다음과 같다.
스레드 풀
컴퓨터 프로그래밍에서 스레드 풀(Thread pool)은 컴퓨터 프로그램에서 병행 실행을 달성하기 위한 소프트웨어 디자인 패턴이다. 종종 복제 작업자 또는 작업자 그룹 모델이라고도 불리는 스레드 풀은 감독 프로그램에 의해 병행 실행을 위해 할당될 태스크를 기다리는 여러 스레드를 유지한다. 스레드 풀을 유지함으로써 이 모델은 성능을 향상시키고 짧은 수명 태스크를 위해 스레드를 자주 생성하고 파괴하는 데 따른 실행 지연을 방지한다. 또 다른 장점은 사용 가능한 스레드보다 적은 스레드를 사용할 때 시스템 부하를 제한하는 기능이다. 사용 가능한 스레드 수는 실행 완료 후 병렬 태스크 큐와 같이 프로그램에 사용 가능한 컴퓨팅 리소스에 맞춰 조정된다.
스레드 풀 성능
스레드 풀의 크기는 태스크 실행을 위해 예비로 유지되는 스레드 수이다. 일반적으로 애플리케이션의 튜닝 가능한 매개변수이며, 프로그램 성능을 최적화하기 위해 조정된다. 최적의 스레드 풀 크기를 결정하는 것은 성능 최적화에 중요하다.
각 태스크에 대해 새 스레드를 생성하는 것보다 스레드 풀의 한 가지 이점은 스레드 생성 및 파괴 오버헤드가 풀의 초기 생성으로 제한되어 더 나은 성능과 더 나은 시스템 안정성을 가져올 수 있다는 것이다. 스레드 및 관련 리소스를 생성하고 파괴하는 것은 시간 측면에서 비용이 많이 드는 프로세스일 수 있다. 그러나 예비 스레드 수가 과도하면 메모리가 낭비되고, 실행 가능한 스레드 간의 컨텍스트 스위칭은 성능 저하를 초래한다. 많은 CPU 사이클이 소요될 수 있는 다른 네트워크 호스트와의 소켓 연결은 두 개 이상의 네트워크 트랜잭션 과정에서 유지되는 스레드와 연결하여 더 효율적으로 유지할 수 있다.
스레드 풀 성능
스레드 시작 시간을 제쳐두고서라도 스레드 풀을 사용하는 것이 유용할 수 있다. 수동으로 스레드를 관리할 때보다 훨씬 쉽게 작업을 큐에 넣고, 병행성을 제어하며, 스레드를 더 높은 수준에서 동기화할 수 있는 스레드 풀 구현이 있다. 이 경우 사용의 성능 이점은 부차적일 수 있다.
일반적으로 스레드 풀은 단일 컴퓨터에서 실행된다. 그러나 스레드 풀은 전체 처리량을 늘리기 위해 스레드 풀 자체일 수 있는 마스터 프로세스가 다른 컴퓨터의 작업자 프로세스에 작업을 분배하는 서버 팜과 개념적으로 관련이 있다. 처치 곤란 병렬 문제는 이 접근 방식에 매우 적합하다.
스레드 수는 대기 중인 태스크 수에 따라 애플리케이션 수명 동안 동적으로 조정될 수 있다. 예를 들어, 웹 서버는 많은 웹 페이지 요청이 들어오면 스레드를 추가할 수 있고, 요청이 줄어들면 스레드를 제거할 수 있다. 더 큰 스레드 풀을 갖는 비용은 리소스 사용량 증가이다. 스레드를 생성하거나 파괴할 시기를 결정하는 데 사용되는 알고리즘은 전체 성능에 영향을 미친다.
스레드 풀 언어별 구현
배시에서는 예를 들어 Xargs의 --max-procs / -P로 구현된다.
Go에서는 워커 풀이라고 불린다.
다음과 같이 출력된다.
네이티브 POSIX 스레드 라이브러리
네이티브 POSIX 스레드 라이브러리(Native POSIX Thread Library, NPTL)는 리눅스 운영 체제를 위한 POSIX 스레드 사양의 구현체이다.
네이티브 POSIX 스레드 라이브러리 역사
리눅스 커널 2.6 버전 이전에는 프로세스가 스케줄링 가능한 엔터티였으며, 스레드를 위한 특별한 기능은 없었다.
그러나 호출 프로세스의 주소 공간을 공유하는 복사본을 생성하는 clone이라는 시스템 호출이 있었다. 리눅스 스레드 프로젝트는 이 시스템 호출을 사용하여 커널 수준 스레드를 제공했다(리눅스의 이전 스레드 구현 대부분은 완전히 사용자 영역에서 작동했다). 불행히도, 신호 처리, 스케줄링, 프로세스 간 동기화 프리미티브 영역에서 POSIX를 부분적으로만 준수했다.
리눅스 스레드를 개선하기 위해서는 일부 커널 지원과 새로운 스레딩 라이브러리가 필요하다는 것이 분명해졌다. 이 요구 사항을 해결하기 위해 두 가지 경쟁 프로젝트가 시작되었다: IBM의 개발자를 포함한 팀이 작업한 NGPT(차세대 POSIX 스레드)와 레드햇의 개발자가 작업한 NPTL이다. NGPT 팀은 NPTL 팀과 긴밀히 협력하여 두 구현의 최상의 기능을 NPTL에 통합했다. NGPT 프로젝트는 2003년 중반에 최상의 기능을 NPTL에 병합한 후 중단되었다.
네이티브 POSIX 스레드 라이브러리 역사
NPTL은 레드햇 리눅스 9에서 처음 출시되었다. 구식 리눅스 POSIX 스레딩은 시스템에 양보하기를 거부하는 스레드에 문제가 있는 것으로 알려져 있었는데, 이는 당시 윈도우가 더 잘하는 것으로 알려진 선점 기회를 잡지 못했기 때문이다. 레드햇은 자바 웹사이트의 레드햇 리눅스 9의 자바에 대한 기사에서 NPTL이 이 문제를 해결했다고 주장했다.
NPTL은 버전 3부터 레드햇 엔터프라이즈 리눅스의 일부였으며, 리눅스 커널 2.6 버전부터 포함되었다. 현재는 GNU C 라이브러리의 완전히 통합된 부분이다.
NPTL을 위한 추적 도구인 POSIX Thread Trace Tool(PTT)이 존재한다. 그리고 POSIX 표준에 대해 NPTL 라이브러리를 테스트하기 위해 Open POSIX Test Suite(OPTS)가 작성되었다.
네이티브 POSIX 스레드 라이브러리 설계
리눅스 스레드와 마찬가지로 NPTL은 1:1 스레드 라이브러리이다. 라이브러리(pthread_create를 통해)에 의해 생성된 스레드는 커널의 스케줄링 가능한 엔터티(리눅스의 경우 프로세스)와 일대일로 대응한다.:226 이는 세 가지 스레딩 모델(1:1, N:1, 및 M:N) 중 가장 간단한 모델이다.:215–216 새 스레드는 NPTL 라이브러리를 통해 호출되는 clone() 시스템 호출로 생성된다. NPTL은 사용자 공간 잠금을 보다 효율적으로 구현하기 위해 futex에 대한 커널 지원에 의존한다.:182
스레드 로컬 스토리지
컴퓨터 프로그래밍에서 스레드 로컬 스토리지(Thread-local storage, TLS)는 정적 또는 전역 메모리를 스레드에 지역적으로 사용하는 메모리 관리 방법이다. 이 개념은 별도의 스레드가 있는 시스템에서 전역처럼 보이는 데이터를 저장할 수 있도록 한다.
많은 시스템은 스레드 지역 메모리 블록의 크기에 제한을 두며, 실제로 상당히 엄격한 제한을 두기도 한다. 반면에, 시스템이 적어도 메모리 주소(포인터) 크기의 변수 스레드 지역을 제공할 수 있다면, 이는 그러한 메모리 블록을 동적으로 할당하고 해당 블록의 메모리 주소를 스레드 지역 변수에 저장함으로써 임의 크기의 메모리 블록을 스레드 지역 방식으로 사용할 수 있게 한다. RISC 머신에서는 호출 규약이 종종 이 용도를 위해 스레드 포인터 레지스터를 예약한다.
스레드 로컬 스토리지 용례
전역 변수의 사용은 일반적으로 현대 프로그래밍에서 권장되지 않지만, 유닉스와 같은 일부 오래된 운영 체제는 원래 단일 프로세서 하드웨어를 위해 설계되었으며 중요한 값을 저장하는 데 전역 변수를 자주 사용한다. 한 예로 C 라이브러리의 많은 함수에서 사용되는 errno가 있다. 여러 스레드가 errno 변수를 수정할 수 있는 현대 머신에서는 한 스레드에서 시스템 함수를 호출하면 다른 스레드에서 시스템 함수를 호출하여 이전에 설정된 값이 덮어쓰여질 수 있으며, 이로 인해 다른 스레드의 후속 코드가 오류 조건을 확인하기 전에 문제가 발생할 수 있다. 해결책은 errno를 전역처럼 보이지만 물리적으로는 스레드별 메모리 풀인 스레드 로컬 스토리지에 저장되는 변수로 만드는 것이다.
두 번째 사용 사례는 여러 스레드가 정보를 전역 변수에 누적하는 경우이다. 경쟁 상태를 피하기 위해 이 전역 변수에 대한 모든 접근은 뮤텍스로 보호되어야 한다. 대신, 각 스레드는 스레드 지역 변수에 누적하여 경쟁 상태의 가능성을 제거하고 락의 필요성을 없앨 수 있다. 그러면 스레드는 자체 스레드 지역 변수에서 단일 전역 변수로 최종 누적을 동기화하기만 하면 된다.
스레드 로컬 스토리지 윈도우 구현
응용 프로그래밍 인터페이스(API) 함수 TlsAlloc은 사용되지 않는 TLS 슬롯 인덱스를 얻는 데 사용될 수 있으며, TLS 슬롯 인덱스는 '사용 중'으로 간주된다.
TlsGetValue 및 TlsSetValue 함수는 TLS 슬롯 인덱스로 식별되는 스레드 지역 변수에 메모리 주소를 읽고 쓰는 데 사용된다. TlsSetValue는 현재 스레드의 변수에만 영향을 미친다. TlsFree 함수는 TLS 슬롯 인덱스를 해제하는 데 호출될 수 있다.
각 스레드에는 Win32 스레드 정보 블록이 있다. 이 블록의 항목 중 하나는 해당 스레드의 스레드 로컬 스토리지 테이블이다.
TlsAlloc을 호출할 때마다 이 테이블에 고유한 인덱스가 반환된다. 각 스레드는 TlsSetValue(index, value)를 독립적으로 사용하고 TlsGetValue(index)를 통해 지정된 값을 얻을 수 있다. 이는 스레드 자체 테이블에서 항목을 설정하고 조회하기 때문이다.
스레드 로컬 스토리지 윈도우 구현
TlsXxx 함수군 외에도 Windows 실행 파일은 실행 중인 프로세스의 각 스레드에 대해 다른 페이지에 매핑되는 섹션을 정의할 수 있다. TlsXxx 값과 달리 이러한 페이지는 임의의 유효한 주소를 포함할 수 있다. 그러나 이러한 주소는 각 실행 스레드마다 다르므로 비동기 함수(다른 스레드에서 실행될 수 있음)에 전달하거나 가상 주소가 전체 프로세스 내에서 고유하다고 가정하는 코드에 전달해서는 안 된다. TLS 섹션은 메모리 페이징을 사용하여 관리되며 그 크기는 페이지 크기(x86 머신에서는 4KB)로 양자화된다.
이러한 섹션은 프로그램의 주 실행 파일 내에서만 정의될 수 있다. DLL에는 이러한 섹션을 포함해서는 안 된다. LoadLibrary로 로드할 때 올바르게 초기화되지 않기 때문이다.
스레드 로컬 스토리지 POSIX 스레드 구현
POSIX 스레드 API에서 스레드에 지역적인 메모리는 스레드 특정 데이터(Thread-specific data)라는 용어로 지정된다.
pthread_key_create 및 pthread_key_delete 함수는 각각 스레드 특정 데이터에 대한 키를 생성하고 삭제하는 데 사용된다. 키의 유형은 명시적으로 불투명하게 남겨지며 pthread_key_t로 참조된다. 이 키는 모든 스레드에서 볼 수 있다. 각 스레드에서 키는 pthread_setspecific을 통해 스레드 특정 데이터와 연결될 수 있다. 데이터는 나중에 pthread_getspecific을 사용하여 검색할 수 있다.
또한 pthread_key_create는 스레드 특정 데이터가 NULL이 아닐 경우 스레드 종료 시 자동으로 호출될 소멸자 함수를 선택적으로 받을 수 있다. 소멸자는 키와 관련된 값을 매개변수로 받아 정리 작업을 수행할 수 있다(연결 닫기, 메모리 해제 등). 소멸자가 지정되더라도 프로그램은 프로세스 수준에서 스레드 특정 데이터를 해제하기 위해 pthread_key_delete를 호출해야 한다(소멸자는 스레드에 지역적인 데이터만 해제한다).
스레드 로컬 스토리지 언어별 구현
프로그래머가 적절한 API 함수를 호출하는 것에 의존하는 것 외에도 스레드 로컬 스토리지(TLS)를 지원하도록 프로그래밍 언어를 확장하는 것도 가능하다.
C11에서는 _Thread_local 키워드가 스레드 지역 변수를 정의하는 데 사용된다. <threads.h> 헤더는 지원되는 경우 thread_local을 해당 키워드의 동의어로 정의한다. 사용 예시:
C11에서 <threads.h>는 또한 tss_로 시작하는 이름을 사용하여 스레드 로컬 스토리지를 검색, 변경 및 파괴하는 여러 함수를 정의한다. C23에서는 thread_local 자체가 키워드가 된다.
C++11은 다음과 같은 경우에 사용할 수 있는 thread_local 키워드를 도입했다.
그 외에도 다양한 컴파일러 구현은 스레드 지역 변수를 선언하는 특정 방법을 제공한다.
비스타 및 서버 2008 이전의 윈도우 버전에서는 __declspec(thread)가 DLL이 실행 파일에 바인딩된 경우에만 작동하며 LoadLibrary()로 로드된 DLL에서는 작동하지 않는다(보호 오류 또는 데이터 손상이 발생할 수 있음).
스레드 로컬 스토리지 언어별 구현
커먼 리스프는 동적 스코프 변수라는 기능을 제공한다.
동적 변수는 함수 호출과 해당 함수가 호출하는 모든 자식 함수에 대해 비공개인 바인딩을 가진다.
이 추상화는 자연스럽게 스레드 특정 저장소에 매핑되며, 스레드를 제공하는 리스프 구현은 이를 수행한다. 커먼 리스프에는 수많은 표준 동적 변수가 있으며, 따라서 동적 바인딩에서 이러한 변수가 스레드 지역 의미론을 갖지 않으면 언어 구현에 스레드를 합리적으로 추가할 수 없다.
예를 들어, 표준 변수 *print-base*는 정수가 인쇄되는 기본 진수를 결정한다. 이 변수가 재정의되면 모든 둘러싸는 코드는 정수를 다른 진수로 인쇄한다.
함수가 다른 스레드에서 동시에 실행될 수 있다면 이 바인딩은 스레드 지역이어야 한다. 그렇지 않으면 각 스레드가 전역 인쇄 진수를 제어하기 위해 서로 싸울 것이다.
D 버전 2에서는 모든 정적 및 전역 변수가 기본적으로 스레드 지역이며 다른 언어의 "일반" 전역 및 정적 변수와 유사한 구문으로 선언된다. 전역 변수는 shared 키워드를 사용하여 명시적으로 요청해야 한다.
스레드 로컬 스토리지 언어별 구현
shared 키워드는 저장소 클래스이자 타입 한정자 역할을 한다. 공유 변수는 데이터 무결성을 정적으로 강제하는 몇 가지 제한 사항이 있다. 이러한 제한 없이 "고전적인" 전역 변수를 선언하려면 안전하지 않은 __gshared 키워드를 사용해야 한다.
자바에서는 스레드 지역 변수가 ThreadLocal 클래스 객체에 의해 구현된다. ThreadLocal은 T 타입의 변수를 저장하며, 이는 get/set 메서드를 통해 접근할 수 있다. 예를 들어, Integer 값을 저장하는 ThreadLocal 변수는 다음과 같다.
적어도 Oracle/OpenJDK의 경우, 자바 스레딩의 다른 측면에서 OS 스레드가 사용되더라도 이는 네이티브 스레드 로컬 스토리지를 사용하지 않는다. 대신, 각 Thread 객체는 ThreadLocal 객체에서 해당 값으로 매핑되는(Thread 객체에서 값으로 매핑되는 ThreadLocal을 가져와 성능 오버헤드를 발생시키는 것과 반대) (스레드 안전하지 않은) 맵을 저장한다.
스레드 로컬 스토리지 언어별 구현
닷넷 프레임워크 언어(예: C 샤프)에서는 정적 필드를 ThreadStatic 속성으로 표시할 수 있다.:898
.NET Framework 4.0에서는 System.Threading.ThreadLocal<T> 클래스를 사용하여 스레드 지역 변수를 할당하고 지연 로딩할 수 있다.:899
또한 스레드 지역 변수를 동적으로 할당하는 API도 사용할 수 있다.:899-890
오브젝트 파스칼 (델파이) 또는 프리 파스칼에서는 'var' 대신 'threadvar' 예약어를 사용하여 스레드 로컬 스토리지를 사용하는 변수를 선언할 수 있다.
코코아, 그누스텝, 오픈스텝에서 각 NSThread 객체는 스레드의 threadDictionary 메서드를 통해 접근할 수 있는 스레드 지역 사전을 가지고 있다.
펄에서는 언어 진화 후반에 스레드가 추가되었는데, 이미 CPAN에 많은 기존 코드가 존재한 이후였다. 따라서 펄에서는 기본적으로 모든 변수에 대해 자체 지역 저장소를 가져와 스레드가 기존의 스레드 비인식 코드에 미치는 영향을 최소화한다. 펄에서 스레드 공유 변수는 속성을 사용하여 생성할 수 있다.
스레드 로컬 스토리지 언어별 구현
퓨어베이직에서 스레드 변수는 Threaded 키워드로 선언된다.
파이썬 버전 2.4 이상에서는 threading 모듈의 local 클래스를 사용하여 스레드 로컬 스토리지를 생성할 수 있다.
local 클래스의 여러 인스턴스를 생성하여 서로 다른 변수 집합을 저장할 수 있다. 따라서 이는 싱글턴이 아니다.
루비는 []=/[] 메서드를 사용하여 스레드 지역 변수를 생성/접근할 수 있다.
러스트에서는 러스트 표준 라이브러리에서 제공하는 thread_local! 매크로를 사용하여 스레드 지역 변수를 생성할 수 있다.
가드 (컴퓨터 과학)
컴퓨터 프로그래밍에서 가드(guard)는 불린식으로, 실행이 해당 분기에서 계속되려면 참으로 평가되어야 한다. 어떤 프로그래밍 언어를 사용하든, 가드 절, 가드 코드 또는 가드 문은 실행 중 오류를 피하기 위해 사용되는 무결성 선행 조건 검사이다.
가드 절이라는 용어는 종종 이름 없는 코딩 관행을 명명된 소프트웨어 디자인 패턴으로 체계화한 켄트 벡에게 귀속되는 소프트웨어 디자인 패턴이다. 이 기술을 사용하는 관행은 적어도 1960년대 초반으로 거슬러 올라간다. 가드 절은 일반적으로 프로시저의 시작 부분에 추가되며, 예외적인 경우를 미리 처리하여 나머지 프로시저를 "보호"한다고 말한다.