Skip to content

wflyer/cine

 
 

Repository files navigation

Cine

Circle CI

Actor model for golang.

This project aims to implement actor model from erlang to Go. It attempts to add a concept of Pid which is universal identifier for actors.

Actor supports Call which is a syncronous method call. Cast which is asyncronous method call ignoring all errors.

Actors can communicate with other actors using Call and Cast. Remote actors are treated same as local actors.

This project is originally based on GLAM

Usage

package main

import (
	"github.com/golang/glog"

	"github.com/devsisters/cine"
)

type Phonebook struct {
	cine.Actor
	book map[string]int
}

func (p *Phonebook) Add(name string, number int) {
	p.book[name] = number
}

func (p *Phonebook) Lookup(name string) (int, bool) {
	result, ok := p.book[name]
	return result, ok
}

func (p *Phonebook) Terminate(errReason error) {
}

func main() {
	cine.Init("127.0.0.1:8000")
	phonebook := Phonebook{cine.Actor{}, make(map[string]int)}
	pid := cine.StartActor(&phonebook)

	cine.Cast(pid, nil, (*Phonebook).Add, "Jane", 1234)
	ret, _ := cine.Call(pid, (*Phonebook).Lookup, "Jane")
	number := ret[0].(int)
	glog.Infoln("number:", number)
	// Out: number: 1234
}

Performance

Preliminary benchmarks indicate about 5x overhead over vanilla channels. Do not use actors for call heavy operations.

BenchmarkChannel	3000000	       583 ns/op
BenchmarkActor	  	500000	      2850 ns/op

About

Actor model for golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%