문제

그것은 보인다고있다 최근에 대한 관심이니(소프트웨어의 트랜잭션 기억)프레임워크 및 언어 확장자. Clojure 특히 훌륭한 구현을 사용하는 MVCC(다중 버전의 동시성 제어) 보다는 회전 commit 로그인합니다.모켈도 매우 우아한 STM 사 는 또한 트랜잭션을 구성입니다.마지막으로,그리고 소 혼는데,최근에 구현 STM 위한 프레임워크 Scala 는 정적으로 적용 참조를 제한이 있습니다.

이러한 모든 재미있는 실험지만,그들은 보이 제한 구역이 혼자(실험).그래서 제 질문은:당신의 볼 또는 사용됩니다 현실 세계에서?그렇다면 이유는 무엇입니까?어떤 종류의 혜택은 그것을 가지고 있습니까?무엇에 대해 성능은?(가 될 것으로 보인 좋은 거래의 충돌에 대한 정보를 이점)는 데 사용할 것입니다 다시 또는 사용자가 선호하는 것을 사용하여 다른 동시성 추출과 같은 배우가?

도움이 되었습니까?

해결책

나는 Haskell (Conleure)에있는 Bittorrent Client의 애호가 개발에 참여했습니다. STM을 상당히 많이 사용하여 다른 스레드를 조정합니다 (피어 당 1 + 스토리지 관리의 경우 1 + 전체 관리의 경우 1).

혜택 : 잠금, 읽기 쉬운 코드.

적어도 STM 사용으로 인해 속도가 문제가되지 않았습니다.

도움이 되었기를 바랍니다

다른 팁

"소프트웨어 트랜잭션 메모리 : 왜 연구 장난감일까요?" Haskell 구현을 보지 못하는데, 이는 실제로 큰 누락입니다. 기사에서 지적한 바와 같이 STM의 문제는 컴파일러가 안전을 증명할 수 없거나 (성능을 죽이는) 트랜잭션이 될지 (단순성을 죽일 수 있는지를 나타내는)를 나타내지 않는 한 모든 변수 액세스 트랜잭션을 만드는 것 사이에 구현이 선택되어야한다는 것입니다. 그리고 신뢰성). 그러나 Haskell 구현은 Haskell의 순도를 사용하여 대부분의 가변이 트랜잭션을 사용해야 할 필요가 없으며, Type System은 트랜잭션 돌연변이 운영에 대한 효과적인 시행과 함께 간단한 모델을 제공합니다. 따라서 Haskell 프로그램은 스레드간에 진정으로 공유되는 변수에 STM을 사용할 수 있지만 비 트랜잭션 메모리 사용은 안전하게 유지됩니다.

우리가 사용하는 꽤 정기적으로 높은 동시에 Galois(용).그것은 작품에서 널리 사용되는 메인 세계지 않는 교착 상태(하지만 물론 당신은 너무 많이 할 수 있습 경).때때로 우리는 다시 쓸 것을 사용하 MVars 는 경우에,우리는 디자인은 오른쪽으로 그들은 빠릅니다.

그냥 그것을 사용할 수 있습니다.그것은 큰 문제입니다.마찬가지로 지금까지 내가 우려,STM 에서 날아다니며"해결".가 더 이상 작업을 할 수 있습니다.그래서 우리는 그것을 사용합니다.

우리, Factis Research Gmbh, 생산에서 GHC와 함께 Haskell STM을 사용하고 있습니다. 당사의 서버는 Clincal "Data Server"에서 새롭고 수정 된 "객체"에 대한 메시지 스트림을 수신 하고이 이벤트 스트림을 즉시 새로운 개체를 생성하고 개체 수정, 물건을 집계하는 등)를 즉시 변환하고 새로운 새로운 것을 계산합니다. 객체는 연결된 iPad와 동기화되어야합니다. 또한 처리 된 iPad의 양식 입력을 수신하고 "메인 스트림"과 병합되며 다른 iPad와 동기화됩니다. 우리는 스레드간에 공유 해야하는 모든 채널 및 변이 가능한 데이터 구조에 STM을 사용하고 있습니다. 스레드는 Haskell에서 매우 가벼워서 성능에 영향을 미치지 않고 많은 것을 가질 수 있습니다 (현재 iPad 연결 당 5 순간). 대규모 응용 프로그램을 구축하는 것은 항상 어려운 일이며 배울 수있는 많은 교훈이 있었지만 STM에는 아무런 문제가 없었습니다. 그것은 항상 당신이 순진하게 기대하는대로 작동했습니다. 우리는 심각한 성능 튜닝을해야했지만 STM은 결코 문제가되지 않았습니다. (시간의 80%는 단기 할당과 전반적인 메모리 사용을 줄이려고 노력했습니다.)

STM은 Haskell과 GHC 런타임이 실제로 빛나는 영역입니다. 그것은 단지 실험이 아니라 장난감 프로그램만을위한 것이 아닙니다.

우리는 Scala에서 Clincal 시스템의 다른 구성 요소를 구축하고 지금까지 배우를 사용하고 있지만 STM이 실제로 누락되었습니다. 누군가가 생산에서 Scala STM 구현 중 하나를 사용하는 것이 어떤 것인지에 대한 경험이 있다면 여러분의 의견을 듣고 싶습니다. :-)

우리가 구현한 우리의 전체 시스템 (메모리에 데이터베이스 및 런타임)우리의 상단에 자신의 STM 구현 C.이에 앞서,우리는 일부 로그와 잠금 메커니즘을 기반으로 처리하는 동시성,하지만 이것은 고통을 유지합니다.우리는 우리와 매우 행복 STM 기 때문에 우리가 치료하는 모든 작업을 동일한 방법입니다.거의 모든 잠금을 제거될 수 있었습니다.우리가 사용하는니다 이제 거의 아무것도에 어떤 크기든지,우리는 심지어는 메모리 관리자를 구현한다.

성능이나 물건을 가속화하기 위해 우리는 이제 사용자 지정 개발 운영 체제 와 공동으로 ETH Zurich.시스템 기본적으로 지원하는 트랜잭션 메모리입니다.

하지만 거기에 몇 가지 도전에 의해 발생 STM 니다.특히 큰 거래 및 핫스팟을 일으키는 불필요한 트랜잭션의 충돌이 발생합니다.는 경우 예를 들어 두 거래 항목을 넣어로 연결 목록,불필요한 충돌이 발생하는 피할 수 있었을 사용하여 잠금 데이터 구조입니다.

현재 일부 PGAS 시스템 연구에서 AKKA를 사용하고 있습니다. Akka Erlang의 "Let It Obly/Crash/Crater/Rofl"철학 이후 모델링 된 Actors, STM 및 내장 결함 공차 기능을 사용하여 확장 가능한 동시 시스템을 개발하기위한 Scala 라이브러리입니다. Akka의 STM 구현은 아마도 Clojure의 STM 구현의 Scala Port 주위에 구축되었습니다. Akka의 STM 모듈에 대한 개요를 찾을 수 있습니다. 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top