当前位置: 首页 > news >正文

滨州市滨城区建设局网站手机网站整站源码

滨州市滨城区建设局网站,手机网站整站源码,阿里云服务器上的网站怎么做修改,长沙百度贴吧Hi, there! 这是一份根据 MIT 6.824(2021) 课程的第 2 课的课堂示例代码改编的 2 个 go 语言编程练习。像其他的编程作业一样#xff0c;我去除了核心部分#xff0c;保留了代码框架#xff0c;并编写了每一步的提示 练习代码在本文的最后面 爬虫 在第一部分#xff0c;…Hi, there! 这是一份根据 MIT 6.824(2021) 课程的第 2 课的课堂示例代码改编的 2 个 go 语言编程练习。像其他的编程作业一样我去除了核心部分保留了代码框架并编写了每一步的提示 练习代码在本文的最后面 爬虫 在第一部分你需要实现 3 个版本的网络爬虫。 1 单线程爬虫 首先请为 fakeFetcher 类型实现 Fetcher 接口中的 Fetch() 方法。然后实现串行爬虫 Serial() 函数递归并在 main() 中调用它预期的输出如下 Serial found: http://golang.org/ found: http://golang.org/pkg/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/fmt/ found: http://golang.org/pkg/os/ 2 多线程爬虫使用锁同步 我们定义了 fetchState 类型用于对 fetched 加锁保护但是还未实现它的“构造函数”。请先实现它的“构造函数”名为 makeState()。注意对于结构体一般返回其指针 然后实现 ConcurrentMutex实现一个通过锁控制的并发爬虫。提示 sync.WaitGroup等待组是Go语言标准库中的一个并发原语用于等待一组 goroutine 完成执行提供了三个主要方法 Add(delta int)增加等待组的计数器。delta 参数表示要添加到计数器的值通常为 1Done()减少等待组的计数器。相当于 Add(-1)Wait()阻塞调用它的 goroutine直到等待组的计数器归零 等待组的计数器是一个非负整数初始值为 0。当计数器的值变为 0 时意味着所有的 goroutine 都已经完成Wait() 方法会解除阻塞并继续执行后续代码 最后在 main 中调用 ConcurrentMutex预期的输出如下 Serial found: http://golang.org/ found: http://golang.org/pkg/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/fmt/ found: http://golang.org/pkg/os/ConcurrentMutex found: http://golang.org/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/ found: http://golang.org/pkg/os/ found: http://golang.org/pkg/fmt/ 3 多线程爬虫使用channel同步 练习代码中已经提供了 ConcurrentChannel 函数你无需改动它只需要实现 worker 和 master 函数即可 // Concurrent crawler with channels func ConcurrentChannel(url string, fetcher Fetcher) {ch : make(chan []string)go func() {ch - []string{url}}()master(ch, fetcher) }最后在 main 中调用 ConcurrentChannel 函数预期的输出如下 Serial found: http://golang.org/ found: http://golang.org/pkg/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/fmt/ found: http://golang.org/pkg/os/ConcurrentMutex found: http://golang.org/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/ found: http://golang.org/pkg/os/ found: http://golang.org/pkg/fmt/ConcurrentChannel found: http://golang.org/ missing: http://golang.org/cmd/ found: http://golang.org/pkg/ found: http://golang.org/pkg/os/ found: http://golang.org/pkg/fmt/kv 存储 在第二部分你需要实现一个基于 RPC 的 KV 存储服务 首先你需要为 *KV 实现 Get 和 Put 方法它们都返回 error 类型。然后补全 get 函数和 put 函数使得它们能够在 main 中正常工作 提示你可以通过下面 3 行代码调用 server 中已经注册的 KV.Get 服务 client : connect() err : client.Call(KV.Get, args, reply) client.Close()完成后预期的输出如下 Put(subject, 6.824) done get(subject) - 6.824练习代码 // crawler-exercise.go package mainimport (sync )// Serial crawler func Serial(url string, fetcher Fetcher, fetched map[string]bool) {// TODO 1 }// Concurrent crawler with shared state and Mutex type fetchState struct {mu sync.Mutexfetched map[string]bool }// TODO 2: implement fetchStates constructorfunc ConcurrentMutex(url string, fetcher Fetcher, f *fetchState) {// TODO 2 }func worker(url string, ch chan []string, fetcher Fetcher) {// TODO 3 }func master(ch chan []string, fetcher Fetcher) {// TODO 3 }// Concurrent crawler with channels func ConcurrentChannel(url string, fetcher Fetcher) {ch : make(chan []string)go func() {ch - []string{url}}()master(ch, fetcher) }func main() {// uncomment them step by step/*fmt.Printf( Serial\n)Serial(http://golang.org/, fetcher, make(map[string]bool))fmt.Printf( ConcurrentMutex \n)ConcurrentMutex(http://golang.org/, fetcher, makeState())fmt.Printf( ConcurrentChannel \n)ConcurrentChannel(http://golang.org/, fetcher)*/ }// Fetcher type Fetcher interface {// Fetch returns a slice of URLs found on the page.Fetch(url string) (urls []string, err error) }// fakeFetcher is Fetcher that returns canned results. type fakeFetcher map[string]*fakeResulttype fakeResult struct {body stringurls []string }// TODO 1: implement Fetch for fakeFetch// fetcher is a populated fakeFetcher. var fetcher fakeFetcher{http://golang.org/: fakeResult{The Go Programming Language,[]string{http://golang.org/pkg/,http://golang.org/cmd/,},},http://golang.org/pkg/: fakeResult{Packages,[]string{http://golang.org/,http://golang.org/cmd/,http://golang.org/pkg/fmt/,http://golang.org/pkg/os/,},},http://golang.org/pkg/fmt/: fakeResult{Package fmt,[]string{http://golang.org/,http://golang.org/pkg/,},},http://golang.org/pkg/os/: fakeResult{Package os,[]string{http://golang.org/,http://golang.org/pkg/,},}, }// kv-exercise.go package mainimport (fmtlognetnet/rpcsync )// // Common RPC request/reply definitions //const (OK OKErrNoKey ErrNoKey )type Err stringtype PutArgs struct {Key stringValue string }type PutReply struct {Err Err }type GetArgs struct {Key string }type GetReply struct {Err ErrValue string }func connect() *rpc.Client {client, err : rpc.Dial(tcp, :1234)if err ! nil {log.Fatal(dialing:, err)}return client }func get(key string) string {// TODO 2return }func put(key string, val string) {// TODO 2 }type KV struct {mu sync.Mutexdata map[string]string }// TODO 1: implement Get method for *KV// TODO 1: implement Put method for *KV func server() {kv : new(KV)kv.data map[string]string{}rpcs : rpc.NewServer()rpcs.Register(kv)l, e : net.Listen(tcp, :1234)if e ! nil {log.Fatal(listen error:, e)}go func() {for {conn, err : l.Accept()if err nil {go rpcs.ServeConn(conn)} else {break}}l.Close()}() }func main() {server()put(subject, 6.824)fmt.Printf(Put(subject, 6.824) done\n)fmt.Printf(get(subject) - %s\n, get(subject)) }
http://www.w-s-a.com/news/906047/

相关文章:

  • 苏州做网站企业wordpress点击文字弹出层
  • 做网站必要性中山古镇做网站
  • 增城住房和城乡建设局网站2021网站你懂我意思正能量
  • seo优秀网站深圳企业医疗网站建设
  • 单页 网站 模板重庆微信网站制作专家
  • 石家庄网站定制制作企业所得税优惠政策最新2022文件
  • 免费推广网站途径有哪些郑州企业型网站建设
  • wap网站建设设计wordpress首页名称
  • wordpress网站换空间南宁网站设计可以找我
  • 期货贵金属网站建设招远网站建设哪家专业
  • 上海网站排名个人网站可以做百度推广
  • 网站主题及样式优化个人网站 可以做论坛吗
  • 中企动力 网站推广一级域名免费申请
  • 山东专业的网站建设博罗做网站哪家强
  • 手机网站支持微信支付吗宝塔如何添加ip域名做网站
  • 什么专业学网站建设企业合同管理系统
  • 我要啦免费统计怎么做网站销售订单管理系统软件
  • 门户网站建设教程更改wordpress端口
  • 普兰店网站建设公司云计算培训
  • 网站建设的网络技术app下载平台哪个好
  • 中国建筑人才网是什么网站导购网站制作
  • 网站建设开票东莞龙岗网站建设
  • 17网站一起做网批最近湘潭的新闻
  • 专业网站设计专业服务网站news怎么做
  • 杭州租房网站建设设计网站架构
  • 安徽做网站公司哪家好建设网站需要什么内容
  • 哪些网络公司可以做机票预订网站网站新闻后台怎么做
  • 微网站 域名企业网站怎么做推广
  • 兴安盟住房和城乡建设部网站在国外做网站
  • 南雄市建设局网站搜索关键词的方法